MySQL 批量添加记录是指一次性向数据库表中插入多条记录,而不是逐条插入。这种操作通常用于提高数据插入的效率,特别是在需要插入大量数据时。
MySQL 提供了几种批量插入的方法:
INSERT INTO ... VALUES
语法:INSERT INTO ... VALUES
语法:INSERT INTO ... SELECT
语法:INSERT INTO ... SELECT
语法:批量添加记录适用于以下场景:
ERROR 1136 (21S01): Column count doesn't match value count at row 1
原因:插入的值的数量与表的列数不匹配。
解决方法:检查插入的值的数量是否与表的列数一致。
-- 错误示例
INSERT INTO table_name (column1, column2)
VALUES
(value1, value2, value3); -- 多了一个 value3
-- 正确示例
INSERT INTO table_name (column1, column2)
VALUES
(value1, value2);
ERROR 1062 (23000): Duplicate entry 'value' for key 'index_name'
原因:插入的数据违反了唯一性约束。
解决方法:检查插入的数据是否唯一,或者修改唯一性约束。
-- 错误示例
INSERT INTO table_name (column1)
VALUES
(value1),
(value1); -- value1 已经存在
-- 正确示例
INSERT INTO table_name (column1)
VALUES
(value1),
(value2); -- value2 是唯一的
ERROR 2006 (HY000): MySQL server has gone away
原因:插入的数据量过大,导致 MySQL 服务器断开连接。
解决方法:增加 max_allowed_packet
参数的值,或者分批插入数据。
-- 修改 max_allowed_packet 参数
SET GLOBAL max_allowed_packet = 128 * 1024 * 1024; -- 128MB
-- 分批插入数据
DELIMITER $$
CREATE PROCEDURE batch_insert()
BEGIN
DECLARE i INT DEFAULT 1;
WHILE i <= 10000 DO
INSERT INTO table_name (column1, column2)
VALUES
(value1, value2),
(value3, value4),
...
(valueN-1, valueN);
SET i = i + 1;
END WHILE;
END$$
DELIMITER ;
CALL batch_insert();
希望这些信息对你有所帮助!如果有更多问题,请随时提问。
领取专属 10元无门槛券
手把手带您无忧上云