Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Điều gì xảy ra với giao dịch MySQL nếu phiên bị DBA kill?


Nếu phiên bị kill giữa giao dịch, MySQL rollback ngầm định giao dịch hiện tại. Tất cả thay đổi bị xóa.

Ví dụ chi tiết

Bảng marks có 6 hàng. Bắt đầu giao dịch, xóa hàng id=4:

mysql> START TRANSACTION;
mysql> Delete from marks where id = 4;
Query OK, 1 row affected (0.00 sec)

Mở cửa sổ khác, chạy SHOW PROCESSLIST tìm ID tiến trình (giả sử ID=2):

mysql> SHOW PROCESSLIST\G
Id: 2
User: root
Host: localhost:49303
db: query
Command: Sleep
Time: 22
State:
Info: NULL

Kill tiến trình:

mysql> KILL 2;
Query OK, 0 rows affected (0.00 sec)

Quay lại phiên đầu, chạy 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)

Kiểm tra bảng - hàng id=4 vẫn tồn tại (rollback đã xảy ra):

mysql> Select * from marks;
+------+---------+-----------+-------+
| Id   | Name    | Subject   | Marks |
+------+---------+-----------+-------+
|    1 | Aarav   | Maths     |    50 |
|    1 | Harshit | Maths     |    55 |
|    3 | Gaurav  | Comp      |    69 |
|    4 | Rahul   | History   |    40 |  -- Vẫn ở đây
|    5 | Yashraj | English   |    48 |
|    6 | Manak   | History   |    70 |
+------+---------+-----------+-------+

Kết luận: KILL buộc MySQL rollback giao dịch đang chạy. Cơ chế an toàn dữ liệu.