【问题标题】:Do relational databases execute insert statements in parallel or sequentially?关系数据库是并行还是顺序执行插入语句?
【发布时间】:2012-07-08 13:44:15
【问题描述】:

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

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

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

【问题讨论】:

    标签: database synchronization dml


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 它可能比这更复杂。主键只是可能强制序列化的一个实例。标识/自动递增列、唯一约束(其中主键是示例)和触发器是其他情况。
    • @GordonLinoff:触发器不会序列化插入 - 除非这是在触发器代码中手动完成的。关于身份列的有趣点。这是身份/自动增量概念的缺点还是底层索引的结果(所以它基本上又是唯一索引“问题”)。我主要使用 Oracle 和 PostgreSQL,并且序列在那里没有任何并发​​问题。
    猜你喜欢
    • 1970-01-01
    • 2017-03-25
    • 2018-06-25
    • 1970-01-01
    • 1970-01-01
    • 2012-10-24
    • 1970-01-01
    • 1970-01-01
    • 2021-12-30
    相关资源
    最近更新 更多