新しい行が挿入されるまでクエリをブロック (待機) する方法はありますか?
質問する
1017 次
1 に答える
1
この質問を提起する原因となることがわかる2つのケースがあります。
大規模なバッチ
INSERT
ステートメント、つまり:INSERT INTO mytable (id, name, date) VALUES (1, 'Tom', '2013-01-31'), (2, 'Dick', '2013-02-28'), (3, 'Harry', '2013-03-31'), ...
この場合、MySQL は内部的にロックを行うため、何もする必要はありません。「mytable」の使用を必要とするクエリは、挿入が完了するまで延期されます。
繰り返しの単一
INSERT
ステートメント、つまり:INSERT INTO mytable (id, name, date) VALUES (1, 'Tom', '2013-01-31'); INSERT INTO mytable (id, name, date) VALUES (2, 'Dick', '2013-02-28'); INSERT INTO mytable (id, name, date) VALUES (3, 'Harry', '2013-03-31'); ...
この場合、テーブルはステートメント間でロック解除され、テーブルを適切に「ロック」する唯一の方法はトランザクションを使用することです。[注: myISAM はトランザクションをサポートしていません。InnoDB または BDB テーブルを使用する必要があります。すなわち:
START TRANSACTION; INSERT INTO mytable (id, name, date) VALUES (1, 'Tom', '2013-01-31'); INSERT INTO mytable (id, name, date) VALUES (2, 'Dick', '2013-02-28'); INSERT INTO mytable (id, name, date) VALUES (3, 'Harry', '2013-03-31'); ... COMMIT;
于 2013-05-28T19:15:09.990 に答える