温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

SQL批量插入怎么操作

发布时间:2026-09-16 12:56:15 来源:亿速云 阅读:85 作者:小樊 栏目:数据库

SQL 批量插入(Batch Insert)常见做法有多种,下面按使用场景给你总结,并附示例。


一、单条 SQL 多值插入(最常用)

适合:一次性写入多条数据,简单高效

INSERT INTO user (name, age)
VALUES
  ('张三', 18),
  ('李四', 20),
  ('王五', 22);

✅ 优点:一次网络请求
⚠ 注意:MySQL 默认 max_allowed_packet 限制


二、INSERT … SELECT(从已有表复制)

适合:表间数据迁移

INSERT INTO user_backup (name, age)
SELECT name, age
FROM user
WHERE age > 18;

三、程序中使用批量(JDBC / Python / MyBatis)

1️⃣ JDBC(Java)

String sql = "INSERT INTO user(name, age) VALUES (?, ?)";
PreparedStatement ps = conn.prepareStatement(sql);

for (User u : users) {
    ps.setString(1, u.getName());
    ps.setInt(2, u.getAge());
    ps.addBatch();
}

ps.executeBatch();

⚠ 要开启:

jdbc:mysql://localhost:3306/db?rewriteBatchedStatements=true

2️⃣ Python(pymysql / sqlalchemy)

cursor.executemany(
    "INSERT INTO user(name, age) VALUES (%s, %s)",
    [("张三", 18), ("李四", 20)]
)

3️⃣ MyBatis

<insert id="batchInsert">
  INSERT INTO user (name, age)
  VALUES
  <foreach collection="list" item="u" separator=",">
    (#{u.name}, #{u.age})
  </foreach>
</insert>

四、LOAD DATA(超大批量)

适合:百万级数据导入

LOAD DATA LOCAL INFILE 'user.csv'
INTO TABLE user
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n';

✅ 速度最快


五、性能 & 注意事项

  • 批量大小建议:500~1000 条/批
  • 大批量插入前可临时关闭索引:
ALTER TABLE user DISABLE KEYS;
-- 插入
ALTER TABLE user ENABLE KEYS;
  • 使用事务包裹批量操作

如果你告诉我:

  • 用的是 MySQL / PostgreSQL / Oracle
  • 代码批量 还是 纯 SQL

我可以直接给你最优写法

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI