MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

セッションが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)

  1. 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

  2. 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