当前仅支持单分区的完整事务。如果一个请求更新了多个分区,则没有分布式事务的保证,如果部分分区更新成功但部分分区更新失败,则可能出现数据不一致。

事务状态不一致

事务中,遭遇单分区死锁,该分区将退出事务状态,其它分区可能仍然在事务状态,此时分区事务状态不一致,分布式数据库要求 client 仅能发送 rollback,而不会为 client 自动进行其它分区的 rollback 调用。

事务开启时,begin/start transaction 部分成功部分失败,则成功的部分分区连接将被关闭(减少参与失败事务的分区数,减小事务失败的影响),同时向 client 返回 error 结果。

事务开启时,set autocommit = 0部分成功部分失败,则失败的部分分区连接将被关闭(set autocommit = 0语句被延迟执行,此前已经向 client 保证了成功,此处仅能关闭执行失败的部分分区,成功的分区将进入事务),同时向 client 返回 error 结果。

已提交数据不一致

单行事务跨分区语句部分成功部分失败,此时将向 client 报出严重错误的异常,此时数据将不一致,并没有任何 rollback 的机会。

多行事务跨分区语句,commit 或隐式 commit 部分成功部分失败,此时将向 client 报出严重错误的异常,此时数据将不一致,并没有任何 rollback 的机会。

未提交数据不一致

多行事务跨分区语句,普通语句部分成功部分失败,此时将报出数据不一致的异常, client 仍然有 rollback 的机会。