SQL 批量插入(Batch Insert)常见做法有多种,下面按使用场景给你总结,并附示例。
适合:一次性写入多条数据,简单高效
INSERT INTO user (name, age)
VALUES
('张三', 18),
('李四', 20),
('王五', 22);
✅ 优点:一次网络请求
⚠ 注意:MySQL 默认 max_allowed_packet 限制
适合:表间数据迁移
INSERT INTO user_backup (name, age)
SELECT name, age
FROM user
WHERE age > 18;
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
cursor.executemany(
"INSERT INTO user(name, age) VALUES (%s, %s)",
[("张三", 18), ("李四", 20)]
)
<insert id="batchInsert">
INSERT INTO user (name, age)
VALUES
<foreach collection="list" item="u" separator=",">
(#{u.name}, #{u.age})
</foreach>
</insert>
适合:百万级数据导入
LOAD DATA LOCAL INFILE 'user.csv'
INTO TABLE user
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n';
✅ 速度最快
ALTER TABLE user DISABLE KEYS;
-- 插入
ALTER TABLE user ENABLE KEYS;
如果你告诉我:
我可以直接给你最优写法。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。