これらの同時実行制御はどちらも単純な英語でどのように動作するのか理解しました。しかし、私は、悲観的なコントロールがコードでどのように行われなければならないかにもっと興味がありました。ここで私は何を感じるである、のは、2人のユーザーがwikiのドキュメントに悲観論とオプティミスティック同時実行制御の実装
悲観的な制御ここで
を更新しようとしていると仮定しましょう、私たちは、取引を利用するように言われます。
BEGIN
SELECT DOC FROM WIKI WHERE DOC_ID = 1;
/* business logic */
UPDATE WIKI SET DOC = INPUT WHERE DOC_ID = 1;
END
しかし、これは以前のアップデートを上書きする傾向があります。トランザクション内で、select文の後に書き込みがあったかどうかを確認するための2回目のチェックが必要であると感じます(ロールバックまたはコミットする場合)。私は正しいですか?複数のユーザーを持っている場合は、ロックはデッドロックが発生する可能性があることを念頭に置いて
Table level Locking and Row Level Locking:
しかしクマ:
「SELECT」と「UPDATE」が*別の*データで動作することを心配している場合(別のユーザーが 'SELECT'と' UPDATE'の間に何かをしたため)、答えは - いいえ、 * IF **あなたは取引中です。どうして?トランザクションは環境を隔離し、データ*スナップショット*で作業しているためです。何もロックする必要はありません。トランザクション中の場合、MySQLはこれを行います。手動ページで[MySQLの利用可能な分離レベル](https://dev.mysql.com/doc/refman/5.7/en/innodb-transaction-isolation-levels.html)をチェックすることができます。 –