📣
TiDB Cloud Premium 开放公测中。为企业级工作负载提供无限扩展、即时弹性伸缩和高级安全保障。此页面由 AI 自动翻译,英文原文请见此处。

BATCH



BATCH 语法会将一个 DML 语句在 TiDB 中切分为多个语句进行执行。这意味着 不保证 事务的原子性和隔离性。因此,它是一个“非事务型”语句。

目前,BATCH 支持 INSERT、REPLACE、UPDATE 和 DELETE。

基于某一列,BATCH 语法将 DML 语句切分为多个作用域范围进行执行。在每个范围内,会执行一条 SQL 语句。

关于用法和限制的详细信息,参见 非事务型 DML 语句。

当你在 BATCH 语句中使用多表 join 时,需要指定列的完整路径以避免歧义:

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。

另请参阅

文档内容是否有帮助?