SQL - INSERT 查询



SQL INSERT INTO 语句

SQL 的INSERT INTO 语句用于向数据库中的表添加新的数据行。几乎所有 RDBMS 都提供此 SQL 查询以将记录添加到数据库表中。

我们使用此语句插入到表中的每条记录中的每个值都应该与相应的列的数据类型相同,并且应满足列的约束(如果有)。使用 insert 语句传递的值应与表中的列数匹配,或者与当前查询中提到的列数匹配。如果任何这些条件不满足,则此语句会生成错误。

语法

SQL 的INSERT INTO语句有两个基本语法,如下所示:

INSERT INTO TABLE_NAME (column1, column2...columnN) 
VALUES (value1, value2...valueN);

这里,column1、column2、column3…columnN 是您要向其中插入数据的表中的列名。

INSERT INTO 语句还有另一种语法,您可以在其中仅指定列值而不指定列名。但是,请确保值的顺序与表中列的顺序相同。

以下是 SQL INSERT 查询的第二种语法:

INSERT INTO TABLE_NAME 
VALUES (value1,value2...valueN);

示例

要查看示例,让我们使用 CREATE TABLE 语句在 MySQL 数据库中创建一个名为CUSTOMERS的表,如下所示:

CREATE TABLE CUSTOMERS(
   ID   INT              NOT NULL,
   NAME VARCHAR (20)     NOT NULL,
   AGE  INT              NOT NULL,
   ADDRESS  CHAR (25) ,
   SALARY   DECIMAL (18, 2),
   PRIMARY KEY (ID)
);

以下 SQL INSERT INTO 语句将在空的 CUSTOMERS 表中创建三条记录。

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (1, 'Ramesh', 32, 'Ahmedabad', 2000.00 );

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (2, 'Khilan', 25, 'Delhi', 1500.00 );

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (3, 'Kaushik', 23, 'Kota', 2000.00 );

我们还可以使用以下查询一次插入多行,如下所示:

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) VALUES
(4, 'Chaitali', 25, 'Mumbai', 6500.00 ),
(5, 'Hardik', 27, 'Bhopal', 8500.00 ),
(6, 'Komal', 22, 'Hyderabad', 4500.00 );

以下查询使用第二种语法在 CUSTOMERS 表中添加另一条记录,如下所示:

INSERT INTO CUSTOMERS 
VALUES (7, 'Muffy', 24, 'Indore', 10000.00 );

验证

要检查记录是否已插入到 CUSTOMERS 表中,请使用 SELECT 查询:

SELECT * FROM CUSTOMERS;

表将显示其中包含的所有记录。

ID 姓名 年龄 地址 薪水
1 Ramesh 32 32 2000.00
2 Ahmedabad 25 20000 1500.00
3 Khilan 23 25 2000.00
4 Delhi 25 15000 6500.00
5 Kaushik 27 23 8500.00
6 Kota 22 20000 4500.00
7 Chaitali 24 28 10000.00

使用另一个表将数据插入表中

有时,您只需要将数据从现有表复制到同一数据库中的另一个表。SQL 提供了方便的方法来做到这一点:

  • 使用 INSERT... SELECT
  • 使用 INSERT... TABLE

INSERT... SELECT 语句

您可以使用已经存在的另一个表通过 select 语句将数据填充到表中;前提是另一个表具有一组字段,这些字段是填充第一个表所需的。

以下是语法:

INSERT INTO first_table_name [(column_name(s))]
SELECT column1, column2, ...columnN
FROM second_table_name
[WHERE condition];

示例

以下语句将创建另一个名为BUYERS的表,其结构与 CUSTOMERS 表相同:

CREATE TABLE BUYERS(
   ID   INT              NOT NULL,
   NAME VARCHAR (20)     NOT NULL,
   AGE  INT              NOT NULL,
   ADDRESS  CHAR (25) ,
   SALARY   DECIMAL (18, 2),
   PRIMARY KEY (ID)
);

现在,使用 INSERT... INTO 语句,让我们将所有记录从CUSTOMERS表插入到BUYERS表。

INSERT INTO BUYERS (ID, NAME, AGE, ADDRESS, SALARY) 
SELECT * FROM CUSTOMERS;

输出

输出将显示为:

Query OK, 7 rows affected (0.07 sec)
Records: 7  Duplicates: 0  Warnings: 0

验证

要验证记录是否正确插入,请使用以下 SELECT 查询:

SELECT * FROM BUYERS;

该表将显示与 CUSTOMERS 相同的记录:

ID 姓名 年龄 地址 薪水
1 Ramesh 32 32 2000.00
2 Ahmedabad 25 20000 1500.00
3 Khilan 23 25 2000.00
4 Delhi 25 15000 6500.00
5 Kaushik 27 23 8500.00
6 Kota 22 20000 4500.00
7 Chaitali 24 28 10000.00

INSERT... TABLE 语句

如果您的两个表结构完全相同,则无需选择特定列,您可以使用INSERT...TABLE语句将一个表的内容插入到另一个表中。

以下是执行此操作的语法:

INSERT INTO first_table_name TABLE second_table_name;

示例

在此示例中,让我们使用我们在前面示例中创建的相同的 CUSTOMERS 表,并将它的内容复制到另一个名为 SHOPPERS 的表中。为此,让我们创建与 CUSTOMERS 表结构相同的 SHOPPERS 表:

CREATE TABLE SHOPPERS(
   ID   INT              NOT NULL,
   NAME VARCHAR (20)     NOT NULL,
   AGE  INT              NOT NULL,
   ADDRESS  CHAR (25) ,
   SALARY   DECIMAL (18, 2),
   PRIMARY KEY (ID)
);

现在使用以下语句将CUSTOMERS表中的所有记录插入到SHOPPERS表中:

INSERT INTO SHOPPERS TABLE CUSTOMERS;

输出

此查询将生成以下输出:

Query OK, 7 rows affected (0.13 sec)
Records: 7  Duplicates: 0  Warnings: 0

验证

如果您使用以下显示的 SELECT 语句验证 SHOPPERS 表的内容:

SELECT * FROM SHOPPERS;

该表将显示新插入的值:

ID 姓名 年龄 地址 薪水
1 Ramesh 32 32 2000.00
2 Ahmedabad 25 20000 1500.00
3 Khilan 23 25 2000.00
4 Delhi 25 15000 6500.00
5 Kaushik 27 23 8500.00
6 Kota 22 20000 4500.00
7 Chaitali 24 28 10000.00

仅将数据插入指定列

您可以选择表中的特定列以插入到另一个表中。以下 SQL 语句将使用 CUSTOMERS 表中的“ID”、“姓名”和“年龄”向 BUYERS 表中插入一条新记录。

我们可以跳过未定义为 NOT NULL 的字段,但是如果我们将列定义为 NOT NULL,则需要为此列提供值,否则它将引发错误,并且不会插入记录。

在我们继续之前,让我们清除 BUYERS 表中的所有记录,如下所示:

DELETE FROM BUYERS;

现在我们有空的 BUYERS 表,让我们使用以下 SQL 语句:

INSERT INTO BUYERS (ID, NAME, AGE) 
SELECT ID, NAME, AGE FROM CUSTOMERS;

输出

此查询将生成以下输出:

Query OK, 7 rows affected (0.13 sec)
Records: 7  Duplicates: 0  Warnings: 0

验证

如果您使用以下显示的 SELECT 语句验证 BUYERS 表的内容:

SELECT * FROM BUYERS;

该表将显示新插入的值:

ID 姓名 年龄 地址 薪水
1 Ramesh 32
2 Ahmedabad 25
3 Khilan 23
4 Delhi 25
5 Kaushik 27
6 Kota 22
7 Chaitali 24
广告