如何避免某个SQL报错导致整个事务回滚

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。

  • 【TiDB 版本】:V4.0
  • 【问题描述】:在批量写入数据的场景下,由于一个事务要写入100条数据,如何避免其中某条SQL的错误导致整个事务回滚?例如是否可以不使用事务,或者建表时做某些设置。 image

若提问为性能优化、故障排查类问题,请下载脚本运行。终端输出打印结果,请务必全选并复制粘贴上传。

可以考虑设置 autocommit 采取自动提交的方式,但是这样可能对于批量写入数据的性能不太友好 可以考虑减小单个事务语句数量,减小因为 SQL 错误导致整个事务回滚的影响。

因为你这边主要是插入的数据有问题导致的报错,这一块应该交由程序来判断如何处理对应的错误。

好的。也就是说除了写入端做处理,tidb是没有办法忽略这种异常情况的。

嗯,目前暂时无法处理这种,如果一个事务被遇到语句执行失败,只回滚单个语句,这样不符合事务的原子性