我很好奇,有没有办法让查询块(等待)直到插入新行?
答案 0 :(得分:1)
有两种情况我可以看到你提出这个问题:
大批量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');
...
在此情况下,表格在语句之间解锁,正确“锁定”表格的唯一方法是使用transaction。 [注意: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;