ThinkPHP批量添加数据必须用insertAll()实现单SQL插入,小批量直接高效,大批量需分片加事务;避免循环单条插入导致性能灾难。

ThinkPHP批量添加数据,是指一次性向数据库插入多条记录的操作方式,核心目标是避免“循环单条插入”带来的性能灾难——比如发100次SQL、触发100次模型验证、占满PHP内存、超时或被MySQL断连。
它不是语法糖,而是一种必须掌握的工程实践:
- 小批量(几十到几百条)用
insertAll()最直接高效; - 需要自动时间戳、验证、事件等模型逻辑时,才考虑
saveAll(); - 超过500条就必须主动分片 + 事务包裹,否则大概率失败。
本质区别在于:
✅ insertAll() 拼一条 SQL:INSERT INTO user (name,email) VALUES ('A','a@'), ('B','b@'), ... —— 一次执行,零模型开销;
❌ 循环 insert() 或 save() 是发 N 条 SQL,每条都走完整流程,1000条 ≈ 1000倍耗时。
所以,“批量添加”在 ThinkPHP 中不是一个可选技巧,而是数据写入的正确起点。



















