如果我要插入 1000 行(需要 20 秒,但只有一个查询)会发生什么。2 秒后,其他人试图在同一位置插入一行,例如
20secondquery
1|yellow
2|blue
3|green
4|violet
2secondquery
4|blue
他们的行会被插入还是会排队直到我的插入完成?(MyISAM)
MyISAM 使用表级锁定。另一个插入必须等待
取决于您使用的是哪种事务和/或锁定。
如果有人发出一个大的 INSERT 语句,那将作为一个操作自动完成。如果他们向一大堆 INSERTS 发送垃圾邮件,那么第二个查询将介于两者之间。
你需要研究表锁定来控制这种事情。
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
没有其他东西将能够读取或写入表。