私はこのmultiupdateクエリを持っている場合はMySQLがInnoDBテーブルを更新するときにexaclyの行をロックすると、
UPDATE user u
INNER JOIN user_profile up ON up.user_id = u.id
SET u.name = 'same_name_i_already_had', up.profile.age = 25
WHERE u.id = 10
のは、ユーザーテーブルの行10は、すでに「same_name_i_already_had」の名前を持っているので、それが更新されてはならないとしましょう。
一方、user_profileテーブルの行の年齢が異なるため、MySQLはそれを更新する必要があります。
MySQLはその行の名前フィールドを更新する必要がないのにもかかわらず、ユーザのテーブル内の行をロックしてい
、両方のテーブルのエンジンとしての行レベルのロッキングシステムとRDBMSとInnoDBのとしてのMySQLを仮定?
ありがとうございます!
優れた答えですが、私は表示されているTABLEロックを理解していません。あなたはinnotopが何を意味するのか説明できますか? –
「IX」モードは、「この表の一部の行をロックするための* I *意図*」を意味する表レベルのロックです。同じ表の行レベルのロックはブロックされませんが、表レベルのロックはブロックされます。 InnoDBのロックの詳細についてはhttp://dev.mysql.com/doc/refman/5.5/en/innodb-lock-modes.htmlを、http://innotop.googlecode.com/svn/html/manualを参照してください。 innotopの使用方法の詳細は、.htmlを参照してください。 –
私が今までに得た最高の答え。どうもありがとうございました! –