1

如果两个用户同时INSERT INTO在同一个目标表上执行语句,这些语句是并行执行还是顺序执行?

这种行为会根据目标表是否有主键而改变吗?

这是为所有关系数据库定义的规则,还是不同的供应商以不同的方式实现它?

4

1 回答 1

2

通常,如果定义了主键它们将(应该)并行执行。

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

一般来说,如果 DBMS 使用MVCC(Oracle、PostgreSQL、Firebird、MySQL/InnoDB,...),那么您可以期望插入并行运行

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

于 2012-07-09T07:57:38.277 回答