博客
关于我
mysql中一条insert语句批量插入多条记录
阅读量:689 次
发布时间:2019-03-17

本文共 1401 字,大约阅读时间需要 4 分钟。

最近在项目中需要对数据进行插表操作,由于数据量较大,我们不能使用普通的insert into语句,因为它会引发for循环,而这对公司部门产品流量大、对性能要求高的场景来说是不是太迟缓了。于是我决定采用批量插入的方式来优化数据库操作。

早期的代码大多使用如下方式:

insert into user_info (user_id, user_name, status, years) values (123, '你好', 1, 15);

或者:

insert into user_info set user_id=123, user_name='你好', status=1, years=15;

虽然这种单句插入的方式在批量处理时也需要循环实现:

for(int i=0;i

其中strSql就是:

insert into user_info (user_id, user_name, status, years) values (123, '你好', 1, 15);

这种方法虽然能实现批量插入,但在大规模数据处理中效率仍不够理想。经过研究和实践,我们最终选择了以下批量SQL实现方案:

insert into user_info (user_id, user_name, status, years) values (123, '你好', 1, 15), (456, '你好', 2, 16);

在实际项目中,插表操作可能会遇到以下情况:当我们不知道需要插入的数据是否已经存在于表中时,可能会导致唯一索引冲突或其他数据库约束问题。这时候就需要合理利用ON DUPLICATE KEY UPDATEREPLACE等功能来解决。

首先分析两种语句的作用和适用场景:

  • ON DUPLICATE KEY UPDATE:在插入记录时,如果发现唯一索引或主键重复,就执行指定的更新操作;如果没有冲突,就直接插入新记录。这种方法能够保留原记录的其他字段值,只更新指定的字段。

    示例:

    insert into user_info (user_id, user_name, status, years) values (123, '你好', 1, 15) on duplicate key update user_name = values(user_name);

    这意味着当user_id冲突时,会保留主键user_id,更改其他字段user_name,而其他字段值会继承原记录的值。

  • REPLACE:在插入记录时,如果发现唯一索引或主键重复,就删除存在的记录并插入新值;如果没有冲突,就直接插入新记录。这种方法适用于需要清除旧记录并添加新记录的情形,而且可以在REPLACE语句中省略into字眼。

    示例:

    replace into user_info (user_id, user_name, status, years) values (123, '你好', 1, 15);

    user_id冲突时,会删除原记录并插入新的数据。如果REPLACE语句的字段不完整,系统会自动将缺失字段填充为默认值。

  • 在实际应用中,应根据具体需求选择合适的语句。例如,当主键或唯一索引重复时,REPLACE会彻底删除旧记录并添加新值,但如果需要保留原记录的其他字段值,ON DUPLICATE KEY UPDATE是更好的选择。

    转载地址:http://payhz.baihongyu.com/

    你可能感兴趣的文章
    python 判断当前时间是否为零点
    查看>>
    python 利用pandas读取本地中CSV文件的指定列 列名重命名 并保存回本地
    查看>>
    python 利用pyspark读取HDFS中CSV文件的指定列 列名重命名 并保存回HDFS
    查看>>
    python 利用pyttsx3文字转语音
    查看>>
    python 利用已有Ner模型进行数据清洗合并
    查看>>
    python 到大数据开发工程师_如何成为一个大数据开发工程师?
    查看>>
    python 加密解密(base64, AES)
    查看>>
    Python 和Java 哪个更适合做自动化测试?
    查看>>
    python 图片转ico
    查看>>
    python 图片转文字、语音转文字、文字转语音保存音频并朗读
    查看>>
    python 在包含类似字符\x16、\x12、\x某某的数组中将以\x开头的字符找出来的方法
    查看>>
    Python 在并行进程之间共享字典
    查看>>
    Python 垃圾收集器文档
    查看>>
    python 基于 wordcloud + jieba + matplotlib 生成词云
    查看>>
    python 基于detectron或mask_rcnn的mask遮罩区域进行图片截取
    查看>>
    Python编程:Tkinter图形界面设计(2)
    查看>>
    Python 基础 - Day 5 Learning Note - 模块 之 标准库:time (1)
    查看>>
    Python 基础一
    查看>>
    Python 基础知识点整理与分享,期盼你的交流!
    查看>>
    python 基础第七篇
    查看>>