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

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

假设一个会话在执行事务的过程中被终止了,那么当前的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)

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程