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

MySQLロールバッククエリ

    MySQLデータベースに加えられた変更を元に戻す必要がある場合があります。 MySQLロールバッククエリを使用して簡単に行うことができます。 MySQLロールバックコマンドを使用してMySQLデータベースをロールバックする方法は次のとおりです。

    MySQLロールバックはどのように機能しますか

    MySQL Rollbackステートメントを使用すると、最近実行されたもう1つのステートメントをロールバックまたは元に戻すことができます。たとえば、誤って行を削除または更新した場合は、MySQLを使用してそれらのステートメントをロールバックし、元のデータベースを復元できます。ただし、MySQLのロールバックは、データベースの変更がデータベースにコミットされていない場合にのみ機能します。

    ボーナスリード:MySQLロールアップの使用方法

    MySQLでコミットした後にロールバックできますか

    いいえ。残念ながら、データベースにコミットされた変更を元に戻すことはできません。

    MySQLデータベースをロールバックする方法

    デフォルトでは、MySQLはすべてのSQLクエリを自動コミットするように構成されていることに注意してください。したがって、MySQLロールバックを使用できるようにする場合は、次のステートメントを使用してMySQLの自動コミットをオフにすることが重要です。

    MySQLデータベースにログインし、次のコマンドを実行して自動コミットを無効にします

    SET autocommit = 0

    または

    SET autocommit = OFF

    次のステートメントを使用して、自動コミットモードを明示的に有効にします。

    SET autocommit = 1

    または

    SET autocommit = ON

    ボーナスリード:MySQLバージョンを確認する方法

    次のテーブルがあるとしますsales(product、order_date、sale) 。削除コマンドの後にMySQLロールバックを発行する方法を見ていきます。

    mysql> select * from sales;
    +---------+------------+------+
    | product | order_date | sale |
    +---------+------------+------+
    | A       | 2020-01-01 |   20 |
    | B       | 2020-01-02 |   25 |
    | B       | 2020-01-03 |   15 |
    | A       | 2020-01-04 |   30 |
    | A       | 2020-01-05 |   20 |
    +---------+------------+------+
    

    次に、上記のように自動コミットをオフにします。

    mysql> set autocommit=0;
    

    次に、salesテーブルのすべての行を削除しましょう。

    mysql> delete from sales;
    Query OK, 5 rows affected (0.00 sec)
    
    mysql> select count(*) from sales;
    +----------+
    | count(*) |
    +----------+
    |        0 |
    +----------+
    

    ご覧のとおり、salesテーブルの5行すべてが削除されています。

    それでは、削除コマンドの後にMySQLロールバックを発行しましょう

    mysql> rollback;
    Query OK, 0 rows affected (0.07 sec)
    
    mysql> select count(*) from sales;
    +----------+
    | count(*) |
    +----------+
    |        5 |
    +----------+
    

    ご覧のとおり、変更がコミットされていないため、削除された5つの行が復元されています。ただし、削除後、ROLLBACKコマンドの前にCOMMITステートメントで問題が発生した場合、MySQLはテーブルを復元しませんでした。

    ボーナスリード:MySQLで外部キーチェックを無効にする方法

    MySQLロールバック更新コマンド

    同様に、更新コマンドをロールバックできます。 セールを更新しましょう 上記の販売の列 テーブル。

    mysql> set autocommit=0;
    
    mysql> select * from sales;
    +---------+------------+------+
    | product | order_date | sale |
    +---------+------------+------+
    | A       | 2020-01-01 |   20 |
    | B       | 2020-01-02 |   25 |
    | B       | 2020-01-03 |   15 |
    | A       | 2020-01-04 |   30 |
    | A       | 2020-01-05 |   20 |
    +---------+------------+------+
    5 rows in set (0.00 sec)
    
    mysql> update sales set sale=sale*2;
    Query OK, 5 rows affected (0.05 sec)
    
    
    mysql> select * from sales;
    +---------+------------+------+
    | product | order_date | sale |
    +---------+------------+------+
    | A       | 2020-01-01 |   40 |
    | B       | 2020-01-02 |   50 |
    | B       | 2020-01-03 |   30 |
    | A       | 2020-01-04 |   60 |
    | A       | 2020-01-05 |   40 |
    +---------+------------+------+
    

    ご覧のとおり、販売列の値は2倍になっています。次に、更新コマンドをロールバックしましょう。

    mysql> rollback;
    
    mysql> select * from sales;
    +---------+------------+------+
    | product | order_date | sale |
    +---------+------------+------+
    | A       | 2020-01-01 |   20 |
    | B       | 2020-01-02 |   25 |
    | B       | 2020-01-03 |   15 |
    | A       | 2020-01-04 |   30 |
    | A       | 2020-01-05 |   20 |
    +---------+------------+------+
    

    ご覧のとおり、販売列の古い値が復元されています。

    エラー時のMySQLロールバックのストアドプロシージャおよびMySQLトランザクションにMySQLロールバックを含めることもできます。重要なのは、自動コミットを無効にしてMySQLロールバックを実行することです。

    Ubiqを使用すると、データを数分で簡単に視覚化し、リアルタイムのダッシュボードで監視できます。今日お試しください。

    1. ApachePOIを使用してJavaプログラムからExcelドキュメントを作成する方法

    2. 'COLLATE SQL_Latin1_General_CP1_CI_AS'は何をしますか?

    3. Wordnetsqliteの同義語とサンプル

    4. SQLServerデータベースのすべてのチェック制約のリストを取得する方法-SQLServer/TSQLチュートリアルパート85