SQL INSERT 语句
SQL INSERT–将一行或多行数据插入表中。
在本教程中,我们将学习如何使用SQL INSERT语句将数据插入表中。
下面说明插入单个行到现有表中的INSERT语句。
INSERT INTO table(column1, column2,...) VALUES (value1, value2,...);
要将行插入表中,需要指定三项内容:
首先,是表,要在insert INTO子句中插入新行的表。
其次是指定表的列,用逗号分隔并用括号括起来。
第三是values子句中的值列表,也使用括号包围且用逗号进行分隔。
数据列列表的元素数必须与值列表的元素数相同,否则数据库引擎将发出错误。
以下INSERT语句将将一个新行插入shippers表:
INSERT INTO shippers(companyname, phone) VALUES ('Alliance Shippers','1-800-222-0451');
VALUES子句中指定了两个常量'Alliance Shippers'和'1-800-222-0451'。
数据库引擎将会将它们分别插入companyname和phone列中。
执行语句后,数据库服务器将返回一条消息,显示受影响的行数。
在这种情况下,我们会收到一条消息“1 row infected”(受影响的一行)通知您已成功插入新行。
注意,我们没有在列列表中指定shipperID列,因为shipperID列是一个自动递增列,每当向表中插入新行时,数据库引擎就会自动为它生成下一个序列。
为了编写更少的代码,SQL提供了INSERT语句的较短形式,如下所示:
INSERT INTO table VALUES(value1,value2,...)
在这种形式中,值列表的顺序必须与表中所有列的顺序相同。如果使用这种形式的INSERT语句,则必须为除了自动递增列之外的所有列提供值。
不过在INSERT语句中使用列名是一种很好的做法,可以使代码更易于维护。
下面的INSERT语句等同于上面的语句:
INSERT INTO shippers VALUES ('Alliance Shippers','1-800-222-0451');
SQL INSERT语句–向表中插入多行
INSERT语句还允许您使用单个语句将多行插入到表中,如下所示:
INSERT INTO table_name(column1,column2…) VALUES (value1,value2,…), (value1,value2,…), …
在这种形式的INSERT语句中,您需要提供多个值列表,每个列表用逗号分隔。
以下INSERT语句将两行插入shippers表:
INSERT INTO shippers(companyName,phone) VALUES ('UPS','1-800-782-7892'), ('DHL','1-800-225-5345')
SQL INSERT语句-复制表的数据
您可以使用SELECT语句从另一个表中选择值并将它们提供给INSERT语句,而不是指定值列表。
这样我们就可以从一个表将数据复制到另一个表。
以下语句说明如何将数据从另一个表another_table复制到表table:
INSERT INTO table(column1, column2,...) SELECT column1, column2,... FROM another_table WHERE condition
SELECT子句中的列名列表必须与INSERT in to子句中的列名列表相对应。如果只想复制部分数据,则需要在WHERE子句中指定条件。
假设您有一个名为shippers_tmp的临时表,其结构与shippers表相同。
要将数据从shippers表复制到shippers_tmp表,请使用以下语句:
INSERT INTO shippers_tmp (shipperid,name,phone) SELECT shipperid, companyName, phone FROM shippers