多くのユーザーがデータベースにアクセスしている場合、データベースをロックする必要がありますか? YES の場合、テーブルまたはデータベースをロックする方法は? ロックを取得しない場合の問題は何ですか? 例: ユーザーがテーブルを更新し、誰かがこのテーブルからデータをフェッチする場合、このテーブルをロックする必要がありますか?
2 に答える
使用する必要がありますTransactions
:
ユーザーがテーブルを更新するとき、UPDATE
ステートメントはSTART TRANSACTION
句内にある必要があります。UPDATE が成功した場合は、COMMIT
else ROLLBACK
.
でテーブルをロックできますLOCK TABLES
。ただし、LOCK TABLES でテーブルをロックすると、整合性チェックが行われるまですべての更新が停止します。READ LOCAL
テーブルの最後で同時挿入を可能にするロック (書き込みロックではなく) を取得すると、他のクライアントによる挿入と同様に、読み取りが許可されます。
http://dev.mysql.com/doc/refman/5.5/en/commit.html
http://dev.mysql.com/doc/refman/5.0/en/ansi-diff-transactions.html
トランザクション分離レベルに応じて、MySQL は自動的にロックを発行します。それらがどのように相互作用するかは、トランザクション分離レベルによって決まります。
非常に特殊な状況でのみ、テーブルまたはデータベース リソースのロックを手動で要求します。ほとんどの場合、これは MySQL によって行われます。上記の回答には、読んで理解することが非常に重要なリンクがあります。