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

SQL Updateステートメントを実行する前にテストするにはどうすればよいですか?

    トランザクションはどうですか?ロールバック機能があります。

    @see https://dev.mysql.com/doc/refman /5.0/en/commit.html

    例:

    START TRANSACTION;
    SELECT * FROM nicetable WHERE somthing=1;
    UPDATE nicetable SET nicefield='VALUE' WHERE somthing=1;
    SELECT * FROM nicetable WHERE somthing=1; #check
    
    COMMIT;
    # or if you want to reset changes 
    ROLLBACK;
    
    SELECT * FROM nicetable WHERE somthing=1; #should be the old value
    

    以下の@rickozoeからの質問への回答:

    通常、これらの行は一度だけ実行されることはありません。 PHPではf.e.あなたはそのようなものを書くでしょう(おそらく少しきれいですが、すぐに答えたいと思いました;-)):

    $MysqlConnection->query('START TRANSACTION;');
    $erg = $MysqlConnection->query('UPDATE MyGuests SET lastname='Doe' WHERE id=2;');
    if($erg)
        $MysqlConnection->query('COMMIT;');
    else
        $MysqlConnection->query('ROLLBACK;');
    

    別の方法は、MySQL変数を使用することです( https:/を参照) /dev.mysql.com/doc/refman/5.7/en/user-variables.htm 土地 https://stackoverflow.com/a/18499823/1416909 ):

    # do some stuff that should be conditionally rollbacked later on
    
    SET @v1 := UPDATE MyGuests SET lastname='Doe' WHERE id=2;
    IF(v1 < 1) THEN
        ROLLBACK;
    ELSE
        COMMIT;
    END IF;
    

    ただし、お気に入りのプログラミング言語で利用可能な言語ラッパーを使用することをお勧めします。



    1. MySQLビューを作成する方法

    2. キャッチされない例外'PDOException'メッセージ'無効なデータソース名'

    3. SQLite JSON_SET()

    4. Railsの移行:PostgreSQL上のBigintが失敗しているようですか?