1
如果两个用户同时在同一个目标表上执行INSERT INTO
语句,这些语句是并行执行还是按顺序执行?关系数据库是否并行或按顺序执行插入语句?
此行为是否会根据目标表是否具有主键而更改?
这是所有关系数据库的定义规则还是不同的供应商以不同的方式实现这一点?
如果两个用户同时在同一个目标表上执行INSERT INTO
语句,这些语句是并行执行还是按顺序执行?关系数据库是否并行或按顺序执行插入语句?
此行为是否会根据目标表是否具有主键而更改?
这是所有关系数据库的定义规则还是不同的供应商以不同的方式实现这一点?
在一般他们将(应)并行执行,如果主键被定义。
该行为在很大程度上取决于DBMS。 MySQL与MyISAM将例如如果正在对该表执行DML,则阻止对表的任何进一步访问。 SQL Server在默认安装和较旧的DB2版本中也是如此。
一般来说,如果DBMS使用MVCC(甲骨文和PostgreSQL,火鸟中,MySQL/InnoDB的,...),那么你可以期望插入并行
一件事运行可以块并发插入是如果两个事务插入相同的主键值。在这种情况下,第二个事务将需要等待第一个提交(然后第二个将得到pk违例错误)或回滚(第二个将成功)。
它可能比这更复杂。主键只是一个可能强制序列化的实例。身份/自动增量列,唯一约束(其中的主键是一个示例)和触发器是其他情况。 – 2012-07-09 13:23:57
@GordonLinoff:触发器不会序列化插入 - 除非这是在触发器代码中手动完成的。关于身份列的有趣点。这是身份/ auto_increment概念的缺点,还是基础索引的结果(因此它基本上是唯一的索引“问题”)。我主要使用Oracle和PostgreSQL,并且序列没有任何并发问题。 – 2012-07-09 13:34:22