Computer >> Máy Tính >  >> Lập trình >> MySQL

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


Giả sử nếu một phiên bị ngắt ở giữa giao dịch thì giao dịch MySQL hiện tại đó sẽ được MySQL khôi phục và kết thúc. Nó có nghĩa là tất cả các thay đổi cơ sở dữ liệu được thực hiện trong giao dịch hiện tại sẽ bị xóa. Nó được gọi là n lần khôi phục ngầm định khi phiên bị kết thúc.

Ví dụ

Giả sử chúng ta có các giá trị sau trong bảng "mark"

 mysql> Chọn * từ các dấu; + ------ + --------- + ----------- + ------- + | Id | Tên | Chủ đề | Dấu | + ------ + --------- + ----------- + ------- + | 1 | Aarav | Toán học | 50 || 1 | Nhảm nhí | Toán học | 55 || 3 | Gaurav | Phần mềm | 69 || 4 | Rahul | Lịch sử | 40 || 5 | Yashraj | Tiếng anh | 48 || 6 | Manak | Lịch sử | 70 | + ------ + --------- + --------- + --------- + 6 hàng trong bộ (0,00 giây)  

Bây giờ chúng ta bắt đầu một giao dịch mới và xóa một hàng khỏi bảng "mark"

 mysql> BẮT ĐẦU GIAO DỊCH; Truy vấn OK, 0 hàng bị ảnh hưởng (0,00 giây) mysql> Xóa khỏi các điểm có id =4; Truy vấn OK, 1 hàng bị ảnh hưởng (0,00 giây) 

Trước khi COMMIT hoặc ROLLBACK, hãy mở cửa sổ khác để chạy một phiên bản MySQL khác và chạy lệnh SHOW PROCESSLIST như sau -

 mysql> HIỂN THỊ DANH SÁCH QUY TRÌNH \ G *************************** 1. hàng *********** **************** Id:2 Người dùng:root Máy chủ:localhost:49303 db:truy vấn Lệnh:Thời gian ngủ:22 Trạng thái:Thông tin:NULL ********** ***************** 2. hàng *************************** Id:3 Người dùng:root Máy chủ:localhost:49350 db:NULLCommand:Thời gian truy vấn:0 Trạng thái:NULL Thông tin:hiển thị danh sách xử lý 2 hàng trong bộ (0,00 giây) 

Bây giờ, hãy kết thúc giao dịch hiện tại bằng cách chạy lệnh KILL như sau -

 mysql> KILL 2; Truy vấn OK, 0 hàng bị ảnh hưởng (0,00 giây) 

Bây giờ, khi chúng ta quay lại giao dịch hiện tại và lệnh COMMIT được thực hiện dưới dạng follws -

 mysql> COMMIT; ERROR 2006 (HY000):Máy chủ MySQL đã biến mất Không có kết nối. Đang cố gắng kết nối lại ... Id kết nối:4Cơ sở dữ liệu hiện tại:queryQuery OK, 0 hàng bị ảnh hưởng (1,01 giây) 

Lệnh KILL ở trên, đã giết phiên hiện tại, buộc MySQL khôi phục các thay đổi được thực hiện trong giao dịch hiện tại. Có thể quan sát thấy từ truy vấn sau rằng không có hàng nào bị xóa khỏi bảng "mark".

 mysql> Chọn * từ các dấu; + ------ + --------- + ----------- + ------- + | Id | Tên | Chủ đề | Dấu | + ------ + --------- + ----------- + ------- + | 1 | Aarav | Toán học | 50 || 1 | Nhảm nhí | Toán học | 55 || 3 | Gaurav | Phần mềm | 69 || 4 | Rahul | Lịch sử | 40 || 5 | Yashraj | Tiếng anh | 48 || 6 | Manak | Lịch sử | 70 | + ------ + --------- + --------- + --------- + 6 hàng trong bộ (0,00 giây)