2

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

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

2secondquery
4|blue

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

4

3 回答 3

2

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

于 2012-05-04T12:53:30.783 回答
1

取决于您使用的是哪种事务和/或锁定。

如果有人发出一个大的 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 TABLESUNLOCK TABLES没有其他东西将能够读取或写入表。

于 2012-05-04T12:45:50.623 回答
1

简短的回答是:这取决于:)

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

MyISAM 的并发插入文档

于 2012-05-04T12:47:37.357 回答