如果会话被 DBA 终止,当前 MySQL 事务会发生什么情况?

mysqlmysqli database更新于 2025/8/10 21:00:17

假设如果会话在事务中间被终止,那么当前 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)

相关文章


有用资源