FrontPage > DataBase > SQLite > ロック処理の検証
残念ながらSQLiteには、テーブルロックや行ロック等の機能は無いようである。
http://www.sqlite.org/lang.html
Q> 何とかロック出来ないか・・・。
A> データベースのロックは出来るようである。
検証結果 -- 接続A -- D:\sqlite-3_0_4>sqlite3.exe test.sqlite SQLite version 3.0.4 Enter ".help" for instructions sqlite> create table lock_test ( ...> item1,item2); sqlite[01]> insert into lock_test values ('hoge1',1); sqlite[03]> BEGIN TRANSACTION; sqlite[04]> insert into lock_test values ('hoge2',2); sqlite[06]> commit; sqlite[09]> BEGIN TRANSACTION; sqlite[10]> insert into lock_test values ('hoge4',4); sqlite[12]> commit; sqlite> -- 接続B -- D:\sqlite-3_0_4>sqlite3.exe test.sqlite SQLite version 3.0.4 Enter ".help" for instructions sqlite[02]> select * from lock_test; hoge1|1 sqlite[05]> insert into lock_test values ('hoge3',3); SQL error: database is locked sqlite[06]> insert into lock_test values ('hoge3',3); sqlite[08]> select * from lock_test; hoge1|1 hoge2|2 hoge3|3 sqlite[11]> select * from lock_test; hoge1|1 hoge2|2 hoge3|3 hoge4|4
※ 「sqlite[n]>」のn部分が時間の流れです。
接続Aでトランザクションが開始されている時に
接続BでもINSERTを実行すると「SQL error: database is locked」とエラーになります。
しかし、トランザクションが開始されていてもSELECTは出来ました。(良かった)