0

この回答のクエリに基づいて作成します (GROUP_CONCATユーザー定義変数にも s が保持されていることに注意してください/想定してください)、InnoDB はいつ、何をロックしtable1ますか?

table1現在更新中の行のみをロックし、次の行から開始するときに解放することをお勧めします。

また、ロックtable2(またはその行)がロックされたときにSELECT、少なくともそれを読み取ることができるようにすることをお勧めします。

更新中の列は PK ではなく、インデックスも作成されていません。

これはどのように達成できますか、またはすでに達成していますか?

これは にありTRIGGERます。

よろしくお願いします!

4

1 に答える 1

1

ロックはトランザクション全体で保持され (操作はアトミックであるため、すべての行が更新されるか、行がまったく更新されないことを意味します)、それを変更することはできません (ストレージ エンジンを変更しない限り)。ただし、読み取りはブロックされないため (SEIALIZABLE分離レベルでない限り)、SELECT クエリは実行されますが、古い値が読み取られます。SELECT FOR UPDATE と SELECT...LOCK IN SHARE MODE のみがアップデートによってブロックされます。

于 2013-01-08T19:17:07.860 に答える