# 使用 Batch 批量插入

__*rewriteBatchedStatements*__

+ 使用批量插入来利用 TiDB 并发处理
+ `addBatch()` 和 `executeBatch` API
+ `rewriteBatchedStatements`

```12
jdbc:mysql://<tidb_server>:<port>/<db_name>?~!@rewriteBatchedStatements=true@!~
```

--------------------------------------------------------------------------------
对于批量插入更新,如果插入记录较多,可以选择使用 addBatch/executeBatch API。通过 addBatch 的方式将多条 SQL 的插入更新记录先缓存在客户端,然后在 executeBatch 时一起发送到数据库服务器。

1. 原理:
通过 JDBC 执行 sql 语句时,update 和 delete 执行 sql 的语句是一条一条发往数据库执行。
但是！数据库的处理速度是很快,单次吞吐量是很大,执行效率极高。这时,"冲突"就发生,数据库处理速度很快,但是执行发往数据库要执行的语句却是一条一条发送,其速度可想而知。所以这种情况数据库的处理速度极快的特点就无法体现。所以,为了解决这种"冲突",**addBatch()**出现了！addBatch() 是把若干 sql 语句装载到一起,然后一次性传送到数据库执行,即是批量处理sql数据的。所以"冲突"得到解决,执行时间大大缩短。

2. 设置:
对于 MySQL Connector/J 实现,默认 Batch 只是将多次 addBatch 的 SQL 发送时机延迟到调用 executeBatch 的时候,但实际网络发送还是会一条条的发送,通常不会降低与数据库服务器的网络交互次数。

3. 结论:
如果希望 Batch 网络发送,需要在 JDBC 连接参数中配置 rewriteBatchedStatements = true