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

MYSQL、PHPはデータベースの複数のテーブルに挿入します

    これらの2つの挿入は独立して実行されるため、同時に実行されている別のプログラムは、最初の挿入は実行されたが2番目の挿入は実行されていない状態でデータベースを参照する場合があります。

    これが問題になるかどうかは、アプリケーションロジックによって異なります。あなたの場合、追加情報なしで見分けるのは難しいです。おそらくそうではありません。 2つのアカウントを含む金融取引は、これがである例です。 問題:すべての口座残高の合計がいつでも間違っていることを望まない。

    これが必要だと思われる場合は、パフォーマンスを犠牲にして操作をアトミックにすることができます。別のプログラムは、最初の挿入の前、または2番目の挿入の後にデータベースを参照します。これは次のように機能します:

    $result = FALSE;
    if (mysql_query('BEGIN')) {
        if (mysql_query($query1) &&
            mysql_query($query2))
            $result = mysql_query('COMMIT'); // both queries looked OK, save
        else
            mysql_query('ROLLBACK'); // problems with queries, no changes
    }
    

    ストレージエンジンはトランザクションをサポートする必要があります。つまり、 InnoDB 。そうしないと、これは黙って機能しません。



    1. Firebase FCMトークン-いつサーバーに送信しますか?

    2. PostgreSQL-IN句のパラメータの最大数?

    3. 1900年1月1日午前3時54分32秒をMySQLに保存する方法は?

    4. SQLServerの1つの列に基づいて複数の列をピボットする