2012-03-02 2 views
-1

私は何もロックすることについて知らない。私はいくつかのMySQLのドキュメントを見てきましたが、このプロセス全体の仕組みを完全に理解することはできません。私は必要なもの、起こるために私のスクリプトに次のイベントのためにある:スクリプト実行中にデータベースを適切にロックする

ステップ1)テーブルのユーザーが
ステップ2をロックします)私のスクリプトは
ステップ3)私のスクリプトがにアップデートを行い、テーブルのユーザーからの2つの行を選択し、テーブルユーザー
ステップ4)スクリプトが実行されているため、テーブルのユーザーはロックが解除されます

これについてはどうすればよいですか?また、テーブルがロックされている間に別のユーザーがこの同じスクリプトを実行するとどうなりますか?スクリプトが進行するとき(テーブルがロック解除されたとき)を知る方法はありますか?私はトランザクションを開始し、更新を選択して調べましたが、ドキュメントは非常に不明です。どんな助けもありがとうございます。そして、はい、テーブルはinnodbです。

+0

?あなたからの例のリンクhttp://stackoverflow.com/questions/129329/optimistic-vs-pessimistic-locking – Slawek

答えて

0

あなたが探しているのは、InnoDBテーブルで使用できるSELECT ... FOR UPDATE構文です。これにより、更新するレコードのみがロックされます。それをトランザクションでラップする必要があります。例えば http://dev.mysql.com/doc/refman/5.0/en/innodb-locking-reads.html

、このようなあなたのクエリを実行:あなたは楽観と悲観的ロックについて読みました

START TRANSACTION 
SELECT ... FOR UPDATE 
UPDATE ... 
COMMIT 
0

更新呼び出しの一部として選択クエリを実行して、手順2を省略します。その後、MySQLは残りの部分を処理します。同時に実行できる書き込みクエリは1つだけです。他のクエリは、後でキューに入れられます。

+0

これをもう少し詳しく説明できますか?私はスクリプトがステップ2の新しいデータをステップ3の間にユーザテーブルに更新することを言及することを忘れた。 – user987048

関連する問題