摘要:在本教程中,您将学习如何使用单个 MySQL INSERT
语句将多行插入表中。
MySQL INSERT
多行语句
要将多行插入表中,可以使用以下形式的INSERT
语句:
INSERT INTO table_name (column_list)
VALUES
(value_list_1),
(value_list_2),
...
(value_list_n);
Code language: SQL (Structured Query Language) (sql)
在这个语法中:
- 首先,指定要在
INSERT INTO
关键字后插入的表的名称。 - 其次,在表名后面的括号内指定以逗号分隔的列列表。
- 第三,在
VALUES
子句中指定以逗号分隔的行数据列表。列表中的每个元素代表一行。每个元素中的值的数量必须与column_list
中的列数相同。
MySQL INSERT
多行限制
理论上,您可以使用单个INSERT
语句插入任意数量的行。但是,当 MySQL 服务器收到大小大于max_allowed_packet
INSERT
语句时,会发出 packet Too Large 错误并终止连接。
此语句显示max_allowed_packet
变量的当前值:
SHOW VARIABLES LIKE 'max_allowed_packet';
Code language: SQL (Structured Query Language) (sql)
这是 MySQL 数据库服务器上的输出。请注意,您的服务器中的值可能不同。

Value
列中的数字是字节数。
要为max_allowed_packet
变量设置新值,请使用以下语句:
SET GLOBAL max_allowed_packet=size;
Code language: SQL (Structured Query Language) (sql)
其中size
是一个整数,表示允许的最大数据包大小(以字节为单位)。
请注意, max_allowed_packet
对INSERT INTO .. SELECT
语句没有影响。 INSERT INTO .. SELECT
语句可以插入任意数量的行。
MySQL INSERT
多行示例
让我们举一个使用INSERT
多行语句的示例。
首先,创建一个名为projects
新表用于演示:
CREATE TABLE projects(
project_id INT AUTO_INCREMENT,
name VARCHAR(100) NOT NULL,
start_date DATE,
end_date DATE,
PRIMARY KEY(project_id)
);
Code language: SQL (Structured Query Language) (sql)
其次,使用INSERT
多行语句将两行插入到projects
表中:
INSERT INTO
projects(name, start_date, end_date)
VALUES
('AI for Marketing','2019-08-01','2019-12-31'),
('ML for Sales','2019-05-15','2019-11-20');
Code language: SQL (Structured Query Language) (sql)
MySQL 发出以下消息:
2 row(s) affected
Code language: SQL (Structured Query Language) (sql)
这意味着两行已成功插入到projects
表中。
请注意,当您插入多行并使用LAST_INSERT_ID()
函数获取AUTO_INCREMENT
列的最后插入的 id 时,您将仅获得第一个插入的行的 id,而不是最后插入的行的 id。
第三,使用以下SELECT
语句来验证插入:
SELECT * FROM projects;
Code language: SQL (Structured Query Language) (sql)
该图显示了输出:

在本教程中,您学习了如何使用 MySQL INSERT
语句向表中插入多行。
本教程有帮助吗?