我对SQLite还很陌生,我只是想了解一下运行事务(使用C API)。在这种情况下,我只需要在两个表上运行两个一致的更新。
最简单的方法似乎是本教程中的方法。您只需要sqlite3_exec
一个单独的组合命令序列,它以BEGIN
开始,以COMMIT
结束。因此,您永远不会执行ROLLBACK
,并且您可能依赖于SQLite在遇到错误时自动回滚。
问题是,手册中关于处理事务错误的部分相当复杂,我不清楚这是一个好方法。文档还建议手动回滚。
下一种方法是执行单个BEGIN
,然后单独运行每个语句,检查错误,最后运行COMMIT
或ROLLBACK
。这真的更好吗,还是只是繁忙的工作?
sqlite3_exec()
将在遇到第一个错误时中止,大多数错误不会导致自动回滚。
您应该首先执行BEGIN,然后执行事务中的所有内容,然后用COMMIT或ROLLBACK结束事务。
在ROLLBACK的情况下,您可以忽略任何错误。要么交易已经回滚,要么你无论如何都无能为力。