如果两个用户同时INSERT INTO
在同一个目标表上执行语句,这些语句是并行执行还是顺序执行?
这种行为会根据目标表是否有主键而改变吗?
这是为所有关系数据库定义的规则,还是不同的供应商以不同的方式实现它?
如果两个用户同时INSERT INTO
在同一个目标表上执行语句,这些语句是并行执行还是顺序执行?
这种行为会根据目标表是否有主键而改变吗?
这是为所有关系数据库定义的规则,还是不同的供应商以不同的方式实现它?
通常,如果定义了主键,它们将(应该)并行执行。
该行为在很大程度上取决于 DBMS。例如,如果对表执行 DML,则带有 MyISAM 的 MySQL 将阻止对表的任何进一步访问。对于默认安装中的 SQL Server 和较旧的 DB2 版本也是如此。
一般来说,如果 DBMS 使用MVCC(Oracle、PostgreSQL、Firebird、MySQL/InnoDB,...),那么您可以期望插入并行运行
可以阻止并发插入的一件事是如果两个事务插入相同的主键值。在这种情况下,第二个事务将需要等待第一个事务提交(然后第二个事务将收到 pk 违规错误)或回滚(第二个事务将成功)。