首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

mysql 批量添加记录

基础概念

MySQL 批量添加记录是指一次性向数据库表中插入多条记录,而不是逐条插入。这种操作通常用于提高数据插入的效率,特别是在需要插入大量数据时。

优势

  1. 提高效率:批量插入可以显著减少与数据库的交互次数,从而提高数据插入的速度。
  2. 减少资源消耗:相比于逐条插入,批量插入可以减少网络传输和数据库处理的开销。
  3. 简化代码:批量插入可以使代码更加简洁,易于维护。

类型

MySQL 提供了几种批量插入的方法:

  1. 使用 INSERT INTO ... VALUES 语法
  2. 使用 INSERT INTO ... VALUES 语法
  3. 使用 INSERT INTO ... SELECT 语法
  4. 使用 INSERT INTO ... SELECT 语法

应用场景

批量添加记录适用于以下场景:

  1. 数据导入:从外部文件或其他数据库导入大量数据时。
  2. 初始化数据:在系统初始化或测试时插入大量测试数据。
  3. 日志记录:批量插入日志记录,以减少对数据库的频繁写操作。

常见问题及解决方法

问题:批量插入时遇到 ERROR 1136 (21S01): Column count doesn't match value count at row 1

原因:插入的值的数量与表的列数不匹配。

解决方法:检查插入的值的数量是否与表的列数一致。

代码语言:txt
复制
-- 错误示例
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'

原因:插入的数据违反了唯一性约束。

解决方法:检查插入的数据是否唯一,或者修改唯一性约束。

代码语言:txt
复制
-- 错误示例
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 参数的值,或者分批插入数据。

代码语言:txt
复制
-- 修改 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();

参考链接

希望这些信息对你有所帮助!如果有更多问题,请随时提问。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

mysql如何批量添加数据_mysql如何批量insert数据

mysql批量insert数据的方法:1、循环插入;2、减少连接资源,拼接一条sql;3、使用存储过程;4、使用【MYSQL LOCAL_INFILE】。...本教程操作环境:windows7系统、mysql8.0.22版,该方法适用于所有品牌电脑。...mysql批量insert数据的方法: 方法一:循环插入 这个也是最普通的方式,如果数据量不是很大,可以使用,但是每次都要消耗连接数据库的资源。...//querysql 这样写正常插入一万条基本问题不大,除非数据很长,应付普通的批量插入够用了,比如:批量生成卡号,批量生成随机码等等。...zqtest(); 这个也只是个测试代码,具体参数大家自行定义 我这里是一次插入8万条,虽然不多但是,每一条数据量都很大,有很多varchar4000 和text字段 耗时 6.524s 方法四:使用MYSQL

10K50
  • MySQL 批量插入记录报 Error 1390 (HY000)

    1.背景 Golang 后台服务使用 GORM 实现与 MySQL 的交互,在实现一个通过 Excel 导入数据的接口时,使用 Save 方法一次性插入大量记录(>1w)时报了如下错误: Error 1390...该错误属于 MySQL 服务端错误,可惜的是,官方文档并未给出详细的错误原因,只给出了错误码的简短描述。错误描述字面意思是“预处理语句包含太多占位符”,结合业务场景,猜测原因是一次插入太多记录。...3.分批插入 既然不允许一次插入太多记录,那么可以改为分批插入,而不是一次性插入所有数据。 // 待插入的记录。...不知道你有没有疑问,我这里分批插入每批记录数是 1000,那可以采用 2000 或者其他数量吗?每批插入记录数的上限是多少呢? 带着这个疑问,请继续往下看。 4.一次最多能插入多少条记录?...MySQL 服务端之所以报 Error 1390 (HY000) 错误,直接原因是一次插入过多的记录,但更深层次的原因是 MySQL SQL 语句的占位符数量有上限,最大值为 16bits 无符号整数的最大值

    95310

    MySql数据库Update批量更新与批量更新多条记录的不同值实现方法

    批量更新 mysql更新语句很简单,更新一条数据的某个字段,一般这样写: UPDATE mytable SET myfield = 'value' WHERE other_field = 'other_value...($sql); } 即是循环一条一条的更新记录。...一条记录update一次,这样性能很差,也很容易造成阻塞。 那么能不能一条sql语句实现批量更新呢?mysql并没有提供直接的方法来实现批量更新,但是可以用点小技巧来实现。...语句更新多条记录了。...代码也很容易理解,你学会了吗 性能分析 当我使用上万条记录利用mysql批量更新,发现使用最原始的批量update发现性能很差,将网上看到的总结一下一共有以下三种办法: 1.批量update,一条记录update

    21.6K31
    领券