遇到 SQLite 需要 nested transaction 的情況,查了一下,似乎沒辦法直接用 TRANSACTION 做。後來是看到另外一個語法 SAVEPOINT 可以解決這樣的問題,而且一般的 SQL DB 好像也都支援。以下是相關的用法:

SAVEPOINT savepoint_name

RELEASE savepoint_name

ROLLBACK TO SAVEPOINT savepoint_name

savepoint_name 就取自己要的名稱,需要做 nested 的情況下就用不同的 savepoint_name,也可以外層用 SAVEPOINT,內層用 TRANSACTION;但是不能外層是 TRANSACTION,內層用 SAVEPOINT 這樣。

參考資料: