MySQL Insert Multiple Rows

摘要:在本教程中,您将学习如何使用单个 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_packetINSERT 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 插入多行示例

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

本教程有帮助吗?