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は出来ました。(良かった)


トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2008-08-24 (日) 16:22:11