MySQL 批量导入是指一次性将大量数据插入到 MySQL 数据库中的过程。相比于逐条插入数据,批量导入可以显著提高数据插入的效率,减少网络传输和数据库的 I/O 开销。
MySQL 批量导入主要有以下几种方式:
LOAD DATA INFILE
命令:这是 MySQL 提供的用于快速导入大量数据的命令,可以直接从文件中读取数据并插入到数据库表中。INSERT INTO ... VALUES (...), (...), ...
语句:通过在 INSERT INTO
语句中一次性插入多条记录来实现批量导入。批量导入适用于以下场景:
ERROR 1062 (23000): Duplicate entry
错误原因:这个错误通常是由于尝试插入重复的数据导致的。MySQL 数据库中的某些字段(如主键)具有唯一性约束,不允许插入重复的值。
解决方法:
INSERT IGNORE
或 REPLACE INTO
语句:INSERT IGNORE
会忽略重复的记录,而 REPLACE INTO
会删除重复的记录并插入新的记录。-- 使用 INSERT IGNORE
INSERT IGNORE INTO table_name (column1, column2, ...) VALUES (value1, value2, ...), (value3, value4, ...);
-- 使用 REPLACE INTO
REPLACE INTO table_name (column1, column2, ...) VALUES (value1, value2, ...), (value3, value4, ...);
ERROR 2006 (HY000): MySQL server has gone away
错误原因:这个错误通常是由于导入的数据量过大,导致 MySQL 服务器在处理过程中断开连接。
解决方法:
max_allowed_packet
参数的值:这个参数控制了 MySQL 服务器允许的最大数据包大小。可以通过修改配置文件或动态设置来增加这个值。-- 动态设置 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 <= 1000 DO
INSERT INTO table_name (column1, column2, ...) VALUES (value1, value2, ...), (value3, value4, ...);
SET i = i + 1;
END WHILE;
END$$
DELIMITER ;
CALL batch_insert();
希望以上信息对你有所帮助!如果你有其他问题,请随时提问。
领取专属 10元无门槛券
手把手带您无忧上云