人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

sqliteについて質問です。

sqliteで複数の処理を行いそれがバッティングした場合というのはどうなるのでしょうか?
MySQLなどは同時に処理をおこなっても大丈夫なのはわかっているのですが、
sqliteは見たところファイルの扱い(実際のところ1つのファイルなんですが)に近いように見えます。
PerlやPHPでファイルを扱う際はロック機構がありますがファイルのロックのような機構があるのでしょうか?
(SQLITEの構文を見ても特にそういったものが見当たらなかったので、自動でそういった処理が組み込まれているでしょうか)

例えばtest.sqlite3というsqliteのファイルへA・B・C・D・Eという処理が同時刻に発生した場合というのはどうなるのでしょうか?

1.順番に実行される
2.同時に実行される
同時に実行される場合
1.5つの処理が別レコードであれば問題なし
2.いくつかの処理が同じレコードの場合は、処理される順番によって結果がかわる事がある

sqliteについての理解が低いので検討違いな質問をしているかも知れませんが、識者の方のご意見を聞ければと思います。

●質問者: quocard
●カテゴリ:インターネット ウェブ制作
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● oil999
●50ポイント

SQLiteはDB全体にロックをかけるため、同時にトランザクションがかかっても
1.順番に実行される
という結果になります。

http://d.hatena.ne.jp/sekom/20081115/p1


quocardさんのコメント
回答ありがとうございま。 ロック機構自体は備わっているのですね。 現在は特にロックを意識することなくsqlを発行していますが、ロック自体を明示的に行わないとロックされないということでしょうか。

oil999さんのコメント
>ロック自体を明示的に行わないとロックされないということでしょうか。 いいえ。自動的にロックがかかります。

quocardさんのコメント
回答ありがとうございます。 ひじょうに参考になりました。

2 ● taroe
●50ポイント


ファイルベースのDBですが・・


sqliteもトランザクションという概念があって
基本はMYSQLと変わりません。

トランザクションを開始するときに、ロックをかけることも可能です。
http://www.nishi2002.com/sqlite/x.php?cate=sql&id=41

・ロックと言う概念がある
・トランザクションが存在する


イメージ的には、マイクロソフトのAccessと同じファイルベースのDBなので
Accessと同程度の制限らしき物があります。



質問の前提では、ロックとかトランザクションとか意識されてないようなので
回答がびみょうになりますが・・・

>1.順番に実行される
同時にと言う場合は、MYSQLでも順番は保障されないはずですけど・・・。

>2.同時に実行される
> 同時に実行される場合
> 1.5つの処理が別レコードであれば問題なし
> 2.いくつかの処理が同じレコードの場合は、処理される順番によって結果がかわる事がある

トランザクションとかロックとかを意識して使わない限り
2です。

これはMYSQLでも同じですけど・・。


quocardさんのコメント
回答ありがとうございます。 現在はsqlをそのままロックなどは意識せずに発行しています。 基本的にはPHPのPDOを使っていますが、明示的にロックを行わないとロックされないという解釈でいいのでしょうか。

taroeさんのコメント
同時に同じレコードにUPDARTEが走った場合は、 処理中に自動でロックがかかるのですが、 データを保護してるだけで、順番を保障してないですよね? この場合のロックは、いわゆる あくまでファイルを破壊しないためのロックです。 明示的に行うロックは、データを保護して データの不整合を避ける目的です。 「ファイルの保護」と「データの保護、不整合の防止」とは 同じロックでも意味合いが違いますよね。 明示的なロックにも テーブルロックとレコードロックの2種類があります。

quocardさんのコメント
回答ありがとうございます。 検索の仕方が悪いせいかSQLiteに関してのこういった情報が見つからなかったこともあってとても助かりました。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ