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

MySQLInnoDB-トランザクションについて混乱しています

    問題が「この挿入は一意のキーに違反しました」のようなものである場合 "、コミットが実行されます。クエリがエラーを返したかどうかを確認する必要があります。エラーが返された場合は、ROLLBACK

    たとえば、サーバーの予期しないシャットダウンが問題である場合、クエリ1と2は実行されません。

    オフコース、ここでの3つのクエリは同じなので、これはばかげた例です。少なくともlidを変更してください 見る。簡単なテストをしてみませんか?

    編集:トランザクションの目的に関する質問を編集しました。

    トランザクションの目的は、実際にデータベースを一貫した状態に保つことです。 (ACID を読んでください。 )、しかし、何が一貫しているかを決定するのはプログラマー次第です。 prodigitalsonの回答 をご覧ください あなたのためにこれを行うエラーキャッチの可能なphp-wayの例を見るために。ただし、トランザクションを実行している間、他のプロセスはトランザクションが行っている変更を認識しません。したがって、アトミックで分離されています。

    CREATE TABLE `testkeys` (
      `lid` INT,
      `column_name` VARCHAR(50),
      UNIQUE KEY `testuniq` (`lid`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
    
    BEGIN;
    INSERT INTO testkeys(lid,column_name) VALUES(1,'test 1');
    INSERT INTO testkeys(lid,column_name) VALUES(2,'test 2');
    INSERT INTO testkeys(lid,column_name) VALUES(3,'test 3');
    INSERT INTO testkeys(lid,column_name) VALUES(2,'test 2b');
    COMMIT;
    


    1. MySql Workbenchインストーラーでは、Visual C ++ 2015再頒布可能パッケージがインストールされている必要がありますが、既にインストールされています

    2. SQL Serverに座標(経度/緯度、Googleマップから)を保存するための最良の方法は何ですか?

    3. マッチ/アゲインストとトランザクション

    4. MySQLクエリをCodeigniter構文に変換する