2016-06-17 3 views
1

私はinnodbでMySQL 5.6を使用しています。我々は、次の2つのテーブルがあるとしましょう: 並行UPDATEまたはINSERT中にSELECTは一貫性を維持しますか?

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) 
); 

は、両方の二つのテーブルのために多くの同時 INSERTUPDATEはすべての時間を実行しているという状況を考えてみましょう。これらのトランザクションを実行するアプリケーションは、楽観的なロックでうまく設計されているため、同時実行では一貫性のないデータは作成されません。そのような状況下では

は、私は次のクエリを発行することについての懸念を持っている:

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

このクエリは、常にそれが一貫性のある結果が返されることを保証していますか?言い換えれば、このクエリは複数の異なるトランザクションのデータを混ぜ合わせることはありませんか?たとえば、レコード数が4、一致しない結果がorder_head.order_detail_countであり、3であるとは限りません。

私はトランザクションをよく理解していないと思うので、参考文献(トランザクションに関する書籍など)への参考になることもあります。

答えて

1

これは、どのRDBMSでも基本的な原則です。

ACID規則(https://en.wikipedia.org/wiki/ACID)は、RDBMSがこの場合、データベースへの各クエリが同時に発生している別のクエリによって干渉されるべきでないISOLATIONを実行する必要があることを示します。

関連する問題