Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

เกิดอะไรขึ้นถ้า MySQL Session ถูก Kill โดย DBA ระหว่าง Transaction


ถ้า Session ถูก Kill ระหว่าง Transaction MySQL จะ Rollback Implicit ลบการเปลี่ยนแปลงทั้งหมด

ตัวอย่าง

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;
mysql> Delete from marks where id = 4;
Query OK, 1 row affected (0.00 sec)

หน้าต่างอื่น รัน SHOW PROCESSLIST หา Process ID แล้ว KILL:

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

กลับมาที่ Transaction เดิม รัน 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 บังคับ Rollback ตรวจสอบตาราง marks แถว id=4 ยังอยู่ (ไม่ถูกลบ):

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)