如果DBA終止了會話,當前MySQL事務會發生什麼?
假設在事務處理過程中會話被終止,則MySQL會回滾當前MySQL事務並結束。這意味著當前事務中所做的所有資料庫更改都將被刪除。當會話被終止時,這稱為隱式回滾。
示例
假設表“marks”中有以下值
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)
現在我們開始一個新事務並從表“marks”中刪除一行
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例項,並執行以下SHOW PROCESSLIST命令:
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回滾當前事務中所做的更改。從以下查詢可以看出,表“marks”中沒有刪除任何行。
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)
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP