2009-12-22 107 views
0

如果我有一个操作如下:MySQL表锁定

在上面操作的表foo被锁定,直到所有的插入到酒吧做了什么?另外,在插入过程中,表格栏是否会被锁定,因为没有人能够读取栏(不会对插入物产生影响)?

假设数据库正在使用隔离级别REPEATABLE READ,并且存储引擎是InnoDB。

+0

您是否检查过以确保表是InnoDB而不是MyISAM? MyISAM不支持事务。 – Yada 2009-12-22 12:32:14

+0

对不起,忘了提。这是InnoDB。 – Abhi 2009-12-22 13:11:32

回答

0

不,这样的innodb操作不会锁定任何表(假设默认的tx隔离级别)。

通常根本没有表级锁,但有一些类型的锁可以看起来像它。

利用innodb中的默认隔离级别,读者不会阻止编写者和编写者永远不会阻止读者。这是设计。

如果你做了INSERT ... SELECT,它会更有效率,但在锁定方面可能没有什么不同。

您可能想了解有关InnoDB auto-inc互斥锁(搜索文档以获取更多信息),但这不是表锁。

0

在REPEATABLE READ序列化级别中,从foo选择的数据将被锁定(但您仍然可以追加到foo或更改未选中的行)。如果只插入bar,我不相信表中现有的行会发生任何锁定。

另外,你有没有理由不使用插入选择?

insert into bar (...) select ... from foo;