2014-06-26 48 views
0

我正在開發一個使用SQLite的觸發器在sqlite的,觸發器和併發

CREATE TRIGGER bar_to_foo AFTER INSERT ON bar 
    BEGIN 
    DELETE * FROM foo; 
    INSERT INTO foo SELECT FROM bar; 
    END; 

多的用戶將使用該應用程序在同一時間和潛在的插入欄,同時形式的應用。

我的問題是:觸發器是否有機會並行執行?如果是這樣,這兩次刪除可能發生在插入之前,這會導致一個foo包含兩次以上的欄。這不是我想要的 - 理想情況下,我希望整個觸發器在重新執行之前執行。如果這不是sqlite中的默認行爲,有沒有辦法指定這應該發生?

+1

這究竟是什麼?此外,根據併發用戶數量的不同,您可能會遇到嚴重的性能問題,因爲SQLite不是爲多用戶使用而設計的,請參閱http://stackoverflow.com/questions/5102027/can-sqlite-support-multiple-user –

+0

這不是爲了業務 - 它是用於自定義文件格式的讀寫。 – mikesol

回答

1

SQLite正確序列化所有事務。 (並且當您不使用顯式事務時,每個頂級語句都將被封裝在一個自動事務中。)

沒有兩個事務可以同時寫入同一個數據庫,無論是從觸發器內還是在任何其他方式。