sql >> データベース >  >> RDS >> Mysql

データベーストリガーは、クロステーブルの整合性制約に対して安全ですか?

    答えはトリガーは安全ではありませんです 。

    トリガーは、他のトランザクションで行われたコミットされていない変更を実際には認識せず、エラーなしで渡されます。このように示すことができます

    トランザクション1:

    START TRANSACTION;
    INSERT INTO plays_in (BetID, PlayerID) VALUES (1,1); -- query A
    

    トランザクション2:

    START TRANSACTION;
    INSERT INTO plays_in (BetID, PlayerID) VALUES (1,2); -- query B; in conflict with A, but passses
    

    両方のトランザクション:

    COMMIT;
    

    plays_in AとBが単一のトランザクションで実行された場合でも、挿入された両方のレコードが含まれます。トリガーはエラーをスローします。

    ソースの例全体は、ここ で確認できます。



    1. 整数のリストをC#からOracleストアドプロシージャに渡します

    2. データベース管理のためのACIDモデルを理解する

    3. 2つのクラスタリング要因の物語

    4. MySQLEnterpriseからMariaDB10.3への移行