码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 实操演练 | 批量插入的三种方式


    最近,我写了一个 node.js 脚本,每天要循环访问数百万个文件,并将其内容插入 MySQL 数据库。该脚本不是一次处理一条记录,而是将文件内容存储在内存中,然后每 1000 个文件运行一次 INSERT 语句。为此,我使用了 INSERT 语句的批量插入形式。你可以根据你的特定要求选择使用其他解决方案。在今天的文章中,我们将介绍一些替代方案。

    批量插入的 INSERT 语句变体

    INSERT 语句支持多种语法变体,其中之一是用于同时插入多行。为此,我们只需要将每个值列表括在括号中并使用逗号将它们分开:

    INSERT INTO table_name (column_list) 
    VALUES 
        (value_list_1), 
        (value_list_2), 
        ... 
        (value_list_n); 
    

    很简单。以下是在 Navicat for MySQL 显示的示例语句:

    上面的语句经过格式化以提高可读性,所以在动态生成 SQL 时你不必担心语句的可读性。只要语法在语义上正确,它就可以正常工作。最后,请注意,使用 INSERT 语句一次只可以插入最多 1000 行数据。

    LOAD DATA INFILE

    对于不希望编写脚本代码的人来说,另一种选择是使用类似于 LOAD DATA INFILE 的命令。这是一个 MySQL 特定的命令,但是大多数其他数据库系统(DBMS)也支持类似的命令。它可以导入各种带分隔符的文件格式,包括逗号(CSV)、制表符(TDV)等。

    以下是将“c:\tmp\discounts.csv”文件的数据导入 discounts 表的语句:

    LOAD DATA INFILE 'c:/tmp/discounts.csv'  
    INTO TABLE discounts  
    FIELDS TERMINATED BY ','  
    ENCLOSED BY '"' 
    LINES TERMINATED BY '\n' 
    IGNORE 1 ROWS; 
    

    在上面的语句中,使用了 IGNORE 1 ROWS 选项来忽略标题。

    我本来想使用这种方法来导入数据,但是我们导入的文件采用了高度专业化和复杂的格式,需要大量的前端逻辑。

    使用导入实用程序

    还有一种方法是使用导入实用程序,例如 Navicat 的“导入向导”。它几乎支持你能想象的任何格式,包括 CSV、Excel、HTML、XML、JSON 和许多其他格式:

    这个画面可以选择选择记录分隔符、字段分隔符和文本识别符号:

    Navicat 实时显示进度:

    完成后,你可以保存所有设置供以后使用,这不仅对于定期运行该设置很有用,而且还允许你对其进行自动化,无需你任何其他干预即可导入数据!

    总结

    在今天的文章中,我们介绍了一些用于在 MySQL 和其他 DBMS 执行批量插入的方法。如果你对 Navicat for MySQL 感兴趣,可以免费试用 14 天!

    往期回顾 

    1. 招募 Navicat Monitor 3.0 监控工具体验官 | 好礼相送
    2. 保姆级教程 | Navicat 人工备份和自动备份
    3. Navicat 16 正式支持 OceanBase 全线数据库产品
    4. Navicat 16 即将支持 Redis
    5. 免费试用 Navicat 16
    6. Navicat 20年发展史 | 1999 年成立于中国香港
    7. SQL 语句中 WHERE 1=1 的作用
    8. SQL 中计算总行数的百分比
    9. 互动有礼活动进行中 | 奖品为价值 819 元 Navicat Premium
    10. 假冒网站引发多重安全风险 | 官方严正声明:切勿在非官方渠道购买或下载 Navicat 软件
  • 相关阅读:
    图扑数字孪生智慧加油站,构建安全防护网
    datax从ES读写数据
    【面试刷题】——堆栈窗口
    如何用 php 实现邮件发送功能
    [maven] 使用 Nexus 管理 repository
    【nuget】如何移动 nuget 缓存文件夹
    javaEE - 1(9000字详解多线程第一篇)
    网络安全(黑客)自学
    Java入门7-面向对象基础
    freeswitch-1.10.7 on centos7编译安装
  • 原文地址:https://blog.csdn.net/weixin_53935287/article/details/126464287
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号