2012-07-09 30 views

回答

2

一般他们将(应)并行执行,如果主键被定义。

该行为在很大程度上取决于DBMS。 MySQL与MyISAM将例如如果正在对该表执行DML,则阻止对表的任何进一步访问。 SQL Server在默认安装和较旧的DB2版本中也是如此。

一般来说,如果DBMS使用MVCC(甲骨文和PostgreSQL,火鸟中,MySQL/InnoDB的,...),那么你可以期望插入并行

一件事运行可以块并发插入是如果两个事务插入相同的主键值。在这种情况下,第二个事务将需要等待第一个提交(然后第二个将得到pk违例错误)或回滚(第二个将成功)。

+0

它可能比这更复杂。主键只是一个可能强制序列化的实例。身份/自动增量列,唯一约束(其中的主键是一个示例)和触发器是其他情况。 – 2012-07-09 13:23:57

+0

@GordonLinoff:触发器不会序列化插入 - 除非这是在触发器代码中手动完成的。关于身份列的有趣点。这是身份/ auto_increment概念的缺点,还是基础索引的结果(因此它基本上是唯一的索引“问题”)。我主要使用Oracle和PostgreSQL,并且序列没有任何并发​​问题。 – 2012-07-09 13:34:22