SELECT在并发UPDATE或INSERT期间是否保持一致性?

时间:2016-06-17 09:36:39

标签: mysql sql transactions rdbms

我使用带有innodb的MySQL 5.6。我们假设我们有以下两个表格:

create table order_head (
    id int not null,
    version int not null,
    order_detail_count int not null,
    primary key (id)
);

create table order_detail (
    id int not null,
    product_id int not null,
    qty int not null,
    order_head_id int not null,
    primary key (id),
    foreign key (order_head_id)
        references order_head (id)
);

考虑两个表的许多并发 INSERT UPDATE 一直在执行的情况。运行这些事务的应用程序设计良好,具有乐观锁定功能,因此并发执行不会产生任何不一致的数据。

在这种情况下,我担心发出以下查询:

SELECT 
    *
FROM
    order_head h
        JOIN
    order_detail d ON (h.id = d.order_head_id);

此查询是否始终确保返回一致的结果?换句话说,这个查询从不混合多个不同交易的数据吗?例如,我不希望结果不一致,例如记录数为4order_head.order_detail_count3

我认为我对交易没有很好的理解,所以任何指向好参考的指针(例如关于交易的书籍)都会受到高度赞赏。

1 个答案:

答案 0 :(得分:1)

这是任何RDBMS的基本原则。

任何RDBMS必须完成的ACID规则(https://en.wikipedia.org/wiki/ACID),在这种情况下是ISOLATION,其中每个数据库查询不应受到同时发生的另一个查询的干扰。