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