如果我要插入1000行(需要20秒,但只有一个查询)会发生什么。 2秒后,其他人试图在同一位置插入一行,例如
20secondquery
1|yellow
2|blue
3|green
4|violet
2secondquery
4|blue
他们的行会被插入还是会排队直到我的插入完成? (MyISAM的)
答案 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 TABLES
和UNLOCK TABLES
之间的时间,其他任何内容都无法读取或写入表格。
答案 2 :(得分:1)
简短回答是:它取决于:)
这取决于您的MySQL服务器配置(例如concurrent_insert
的值)以及您为插入数据而运行的查询。