BATCH

BATCH 语句将一个 DML 语句拆成多个语句在内部执行,因此不保证事务的原子性和隔离性,是一个“非事务”语句。

目前 BATCH 语句支持 INSERTREPLACEUPDATEDELETE

BATCH 语句在某一列将 DML 语句涉及的范围划分为多个区间,在每个区间执行一条 SQL。

详细的说明和使用限制见非事务语句

在涉及多表 join 时,BATCH 语法中指定拆分列时需要指明完整的路径以避免歧义,如:

BATCH ON test.t2.id LIMIT 1 INSERT INTO t SELECT t2.id, t2.v, t3.v FROM t2 JOIN t3 ON t2.k = t3.k;

上面这条语句的拆分列用 test.t2.id 指明,不具有歧义。如果写成如下 id 的形式,则会报错:

BATCH ON id LIMIT 1 INSERT INTO t SELECT t2.id, t2.v, t3.v FROM t2 JOIN t3 ON t2.k = t3.k; Non-transactional DML, shard column must be fully specified

语法图

NonTransactionalDMLStmt
BATCHONColumnNameLIMITNUMDryRunOptionsShardableStmt
DryRunOptions
DRYRUNQUERY
ShardableStmt
DeleteFromStmtUpdateStmtInsertIntoStmtReplaceIntoStmt

MySQL 兼容性

BATCH 语句是 TiDB 独有的语句,与 MySQL 不兼容。

另请参阅