セッションがDBAによって強制終了された場合、現在のMySQLトランザクションはどうなりますか?
トランザクションの途中でセッションが強制終了された場合、現在のMySQLトランザクションはMySQLによってロールバックされて終了するとします。これは、現在のトランザクションで行われたすべてのデータベース変更が削除されることを意味します。セッションが強制終了されると、暗黙的なロールバックと呼ばれます。
テーブル「マーク」に次の値があるとします
mysql> Select * from marks; +------+---------+-----------+-------+ | Id | Name | Subject | Marks | +------+---------+-----------+-------+ | 1 | Aarav | Maths | 50 | | 1 | Harshit | Maths | 55 | | 3 | Gaurav | Comp | 69 | | 4 | Rahul | History | 40 | | 5 | Yashraj | English | 48 | | 6 | Manak | History | 70 | +------+---------+---------+---------+ 6 rows in set (0.00 sec)
次に、新しいトランザクションを開始し、テーブルの「マーク」から行を削除します
mysql> START TRANSACTION; Query OK, 0 rows affected (0.00 sec) mysql> Delete from marks where id = 4; Query OK, 1 row affected (0.00 sec)
COMMITまたはROLLBACKの前に、他のウィンドウを開いてMySQLの別のインスタンスを実行し、次のようにSHOWPROCESSLISTコマンドを実行します-
mysql> SHOW PROCESSLIST\G *************************** 1. row *************************** Id: 2 User: root Host: localhost:49303 db: query Command: Sleep Time: 22 State: Info: NULL *************************** 2. row *************************** Id: 3 User: root Host: localhost:49350 db: NULL Command: Query Time: 0 State: NULL Info: show processlist 2 rows in set (0.00 sec)
次に、次のようにKILLコマンドを実行して、現在のトランザクションを強制終了します-
mysql> KILL 2; Query OK, 0 rows affected (0.00 sec)
現在のトランザクションに戻り、COMMITコマンドが次のように実行されると-
mysql> COMMIT; ERROR 2006 (HY000): MySQL server has gone away No connection. Trying to reconnect... Connection id: 4 Current database: query Query OK, 0 rows affected (1.01 sec)
現在のセッションを強制終了した上記のKILLコマンドは、MySQLに現在のトランザクションで行われた変更をロールバックするように強制します。次のクエリから、テーブル「マーク」から行が削除されていないことがわかります。
mysql> Select * from marks; +------+---------+-----------+-------+ | Id | Name | Subject | Marks | +------+---------+-----------+-------+ | 1 | Aarav | Maths | 50 | | 1 | Harshit | Maths | 55 | | 3 | Gaurav | Comp | 69 | | 4 | Rahul | History | 40 | | 5 | Yashraj | English | 48 | | 6 | Manak | History | 70 | +------+---------+---------+---------+ 6 rows in set (0.00 sec)
-
MySQLのEXCEPTに相当するものは何ですか?
MySQLではEXCEPTを使用できません。代わりに、NOTIN演算子を使用してください。まずテーブルを作成しましょう- mysql> create table DemoTable ( Number1 int ); Query OK, 0 rows affected (0.71 sec) 挿入コマンド-を使用して、テーブルにいくつかのレコードを挿入します mysql> insert into DemoTable values(100); Query OK, 1 row affected (0.14 se
-
MySQLエイリアスの省略形とは何ですか?
名前を明示的に指定する必要があります。そうでない場合は、ASコマンドを削除できます。まずテーブルを作成しましょう- mysql> create table DemoTable ( Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, Name varchar(20) ); Query OK, 0 rows affected (0.21 sec) 挿入コマンド-を使用して、テーブルにいくつかのレコードを挿入します mysql> insert in