0

これらの同時実行制御はどちらも単純な英語でどのように動作するのか理解しました。しかし、私は、悲観的なコントロールがコードでどのように行われなければならないかにもっと興味がありました。ここで私は何を感じるである、のは、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:

しかしクマ:

+0

「SELECT」と「UPDATE」が*別の*データで動作することを心配している場合(別のユーザーが 'SELECT'と' UPDATE'の間に何かをしたため)、答えは - いいえ、 * IF **あなたは取引中です。どうして?トランザクションは環境を隔離し、データ*スナップショット*で作業しているためです。何もロックする必要はありません。トランザクション中の場合、MySQLはこれを行います。手動ページで[MySQLの利用可能な分離レベル](https://dev.mysql.com/doc/refman/5.7/en/innodb-transaction-isolation-levels.html)をチェックすることができます。 –

答えて

1

は、次の2つの(悲観的)同時実行の選択肢を持っています。並行性を使用する際には、多くのことを考慮する必要があります。がんばろう!

UPDATE:

デッドロックと他の同時実行の問題を引き起こす可能性がロックするので、あなたがチェックインして、ユーザーが特定のレコードをチェックアウトするときに、それは他のを防ぐことができますチェックアウト機能を実装することができますユーザーは同じレコードをチェックアウトします。

関連する問題