两个插入同时

时间:2012-05-04 12:43:53

标签: mysql myisam

如果我要插入1000行(需要20秒,但只有一个查询)会发生什么。 2秒后,其他人试图在同一位置插入一行,例如

20secondquery
1|yellow
2|blue
3|green
4|violet

2secondquery
4|blue

他们的行会被插入还是会排队直到我的插入完成? (MyISAM的)

3 个答案:

答案 0 :(得分:2)

MyISAM使用表级锁定。另一个插入必须等待

答案 1 :(得分:1)

取决于您正在使用哪种交易和/或锁定。

如果有人发出一个大的INSERT语句,那么它将作为单个操作以原子方式完成。如果他们发送了大量的INSERTS垃圾邮件,那么第二个查询将介于这两者之间。

你需要调查Table Locking来控制这种事情。

LOCK TABLES widgets WRITE;
INSERT INTO widgets (name) VALUES ('Widget A');
INSERT INTO widgets (name) VALUES ('Widget B');
INSERT INTO widgets (name) VALUES ('Widget C');
INSERT INTO widgets (name) VALUES ('Widget D');
INSERT INTO widgets (name) VALUES ('Widget E');
UNLOCK TABLES;

对于LOCK TABLESUNLOCK TABLES之间的时间,其他任何内容都无法读取或写入表格。

答案 2 :(得分:1)

简短回答是:它取决于:)

这取决于您的MySQL服务器配置(例如concurrent_insert的值)以及您为插入数据而运行的查询。

Documentation on concurrent inserts for MyISAM