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

PHP+MySQLトランザクションの例

    トランザクションを操作するときに私が一般的に使用するアイデアは、次のようになります(semi-pseudo-code)

    try {
        // First of all, let's begin a transaction
        $db->beginTransaction();
        
        // A set of queries; if one fails, an exception should be thrown
        $db->query('first query');
        $db->query('second query');
        $db->query('third query');
        
        // If we arrive here, it means that no exception was thrown
        // i.e. no query has failed, and we can commit the transaction
        $db->commit();
    } catch (\Throwable $e) {
        // An exception has been thrown
        // We must rollback the transaction
        $db->rollback();
        throw $e; // but the error must be handled anyway
    }
    

    このアイデアでは、クエリが失敗した場合、例外をスローする必要があることに注意してください。
    • PDOは、構成方法に応じて、これを実行できます
    • それ以外の場合、他のAPIを使用すると、クエリの実行に使用された関数の結果をテストし、自分で例外をスローする必要がある場合があります。

    残念ながら、魔法は関係していません。命令をどこかに置いてトランザクションを自動的に実行することはできません。トランザクションで実行する必要のあるクエリのグループを指定する必要があります。

    たとえば、トランザクションの前(beginの前)にいくつかのクエリが発生することがよくあります。 ) トランザクション後の別の2つのクエリcommitの後) またはrollback そして、何が起こったとしても、それらのクエリを実行する必要があります(またはそうでない) トランザクションで。



    1. データベースをリセラーサーバーに移行する方法

    2. 何回も何回も!データモデルでの定期的なイベントの管理

    3. テーブル内の複数の制約:すべての違反を取得する方法は?

    4. ORA-00604 ORA-12705