首页
学习
活动
专区
圈层
工具
发布

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 批量插入记录报 Error 1390 (HY000)

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

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

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

    25K31

    salt-ssh批量操作记录

    根据以往运维工作中操作经验来说,当管理上百台上千台服务器时,选择一款批量操作工具是及其有必要的。...早期习惯于在ssh信任关系的前提下做fo;do;done循环语句的批量操作,后来逐渐趋于使用批量工具操作: 1)pssh工具,它需要提前做好key关联的ssh信任关系,比起for循环语句,我之前还是比较喜欢用...下面就对salt-ssh的使用做一简单梳理: 1)安装 根据Saltstack自动化操作记录(1)-环境部署安装saltstack后,就有了salt-ssh命令 或者根据下面的操作进行单独安装 [root...kB9G port: 25791 然后执行批量操作命令: [第一次执行的时候,有的机器可能会提醒输入密码验证,这个只需按照提示输入对应密码即可!]...然后就可以删除roster里面的passwd密码条目了,删除roster文件里的密码条目后,不影响后批量操作的执行。

    1.9K80

    分布式监控系统Zabbix--完整安装记录-批量添加主机和自动发现端口

    一、Zabbix-3.0.3批量添加主机的配置如下: 0)被监控机上要安装zabbix_agent,并配置好zabbix_agentd.conf (如下172.29.8.50是zabbix_server...上面“操作”里的“默认接收人”和“默认信息”都是默认的配置,不用修改,只需要添加下面的操作即可 3)等一会儿,就会发现已批量添加了上面配置的网段的机器 ?...上面采用"自动发现"批量添加主机后,显示的名称是主机的ip地址。即添加的客户端主机的Host name是以IP地址命名的,不够人性化。...------------------------------------批量添加主机到zabbix监控中--------------------------------- 将新上线的172.29.32.0.../24网段的服务器添加到zabbix监控中,zabbix_agent一键安装脚本为:https://pan.baidu.com/s/1o8wpFpo 提取密码:7qsi 操作步骤记录(下面是在

    1.9K80
    领券