我使用sqlite ON CONFLICT ROLLBACK
子句來保留一個可能佔用的資源表。這是通過重複的陳述來完成的,這些陳述在交易中非常有意義。像這樣:sqlite ON CONFLICT ROLLBACK和連續查詢
BEGIN TRANSACTION;
INSERT INTO places (place) VALUES(17);
INSERT INTO places (place) VALUES(18);
INSERT INTO places (place) VALUES(19);
COMMIT;
這些地方受限於... place UNIQUE ON CONFLICT ROLLBACK ...
子句。
但是,似乎交易不是這個用途的理智。事實上,如果有一個衝突觸發器,即使我們沒有觸發COMMIT
聲明,交易也會回滾。在COMMIT
和COMMIT
之前的以下語句本身被執行,看起來,現在作爲具有隱式提交的單個語句。這種行爲有沒有用?我希望在調用COMMIT
和ROLLBACK
產生BEGIN
之前的狀態(如果被觸發)之前不會發生任何事情。
這是爲什麼?
好的,但是使用一個語句明顯不能使用多個語句,例如不能混合使用INSERT和UPDATE,或者同時修改多個表。並且在每個查詢之後檢查錯誤是否會導致異常操作,其中我的應用程序發送了一堆針對sqlite3二進制文件的查詢。 – dronus
另外它很有趣,當可能衝突的查詢作爲最後一個發出時,事實上'ROLLBACK'在發生衝突之前發出的任何查詢,將其置於事務中間時不會給出該功能...... – dronus
所以,一個實際上可以結合不同的陳述,只要可能的衝突只有一個,最後發佈。 – dronus