Khôi phục truy vấn mysql

Giao dịch trong SQL là một nhóm các câu lệnh SQL. Nếu một giao dịch được thực hiện thành công, thì tất cả các thay đổi dữ liệu đều được thực hiện trong khi giao dịch được lưu vào cơ sở dữ liệu. Nếu một giao dịch bị lỗi và bị khôi phục, thì tất cả các sửa đổi dữ liệu sẽ bị xóa (dữ liệu được khôi phục về trạng thái trước khi thực hiện giao dịch)

Đặc điểm của giao dịch

Giao dịch có bốn đặc điểm tiêu chuẩn sau

  • Bảo toàn - chắc chắn rằng tất cả các câu lệnh trong nhóm lệnh đều được thực thi thành công. Nếu không, giao dịch bị hủy bỏ tại thời điểm thất bại và tất cả các thao tác trước đó được khôi phục về trạng thái cũ
  • Nhất quán - chắc chắn rằng cơ sở dữ liệu thay đổi chính xác các trạng thái khi một giao dịch được thực thi thành công
  • Độc lập - cho phép các giao dịch hoạt động độc lập và minh bạch với nhau
  • Bền bỉ - chắc chắn rằng kết quả của một giao dịch được cam kết vẫn tồn tại trong trường hợp hệ thống lỗi

Nội dung chính

Xử lý giao dịch

Các lệnh sau đây được sử dụng để xử lý giao dịch

  • COMMIT - to save the change
  • ROLLBACK - to khôi phục lại các thay đổi
  • SAVEPOINT - tạo ra các điểm trong giao dịch để ROLLBACK
  • SET TRANSACTION - thiết lập các thuộc tính cho giao dịch

Các lệnh điều khiển giao dịch chỉ được sử dụng với các lệnh thao tác dữ liệu DML như - INSERT, UPDATE và DELETE

Chúng không thể được sử dụng trong lệnh CREATE TABLE hoặc DROP TABLE vì các hoạt động này được tự động cam kết trong cơ sở dữ liệu


1. Lệnh COMMIT

Lệnh COMMIT được sử dụng để lưu các thay đổi được gọi bởi một giao dịch với cơ sở dữ liệu

Lệnh COMMIT lưu tất cả các giao dịch vào cơ sở dữ liệu kể từ khi lệnh COMMIT hoặc ROLLBACK cuối cùng

Cú pháp của COMMIT command as after

COMMIT;

Ví dụ

Sử dụng bảng KHÁCH HÀNG có các bản ghi sau đây

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ha Anh   |  32 | Da Nang   |  2000.00 |
|  2 | Van Ha   |  25 | Ha Noi    |  1500.00 |
|  3 | Vu Bang  |  23 | Vinh      |  2000.00 |
|  4 | Thu Minh |  25 | Ha Noi    |  6500.00 |
|  5 | Hai An   |  27 | Ha Noi    |  8500.00 |
|  6 | Hoang    |  22 | Ha Noi    |  4500.00 |
|  7 | Binh     |  24 | Ha Noi    | 10000.00 |
+----+----------+-----+-----------+----------+

Sau đây là một ví dụ có thể xóa các bản ghi từ bảng có tuổi = 25 và sau đó CAM KẾT thay đổi trong cơ sở dữ liệu

DELETE FROM CUSTOMERS
   WHERE AGE = 25;
COMMIT;

Vì vậy, hai hàng từ bảng sẽ bị xóa và câu lệnh SELECT sẽ cho kết quả sau

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ha Anh   |  32 | Da Nang   |  2000.00 |
|  3 | Vu Bang  |  23 | Vinh      |  2000.00 |
|  5 | Hai An   |  27 | Ha Noi    |  8500.00 |
|  6 | Hoang    |  22 | Ha Noi    |  4500.00 |
|  7 | Binh     |  24 | Ha Noi    | 10000.00 |
+----+----------+-----+-----------+----------+


2. Lệnh QUAY LẠI

Lệnh ROLLBACK được sử dụng để hoàn tất các giao dịch chưa được lưu vào cơ sở dữ liệu. Lệnh này chỉ có thể được sử dụng để hoàn thành các giao dịch kể từ khi lệnh COMMIT hoặc ROLLBACK cuối cùng được phát hành

Cú pháp ROLLBACK command as after

ROLLBACK;

Ví dụ

Sử dụng bảng KHÁCH HÀNG có các bản ghi sau đây

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ha Anh   |  32 | Da Nang   |  2000.00 |
|  2 | Van Ha   |  25 | Ha Noi    |  1500.00 |
|  3 | Vu Bang  |  23 | Vinh      |  2000.00 |
|  4 | Thu Minh |  25 | Ha Noi    |  6500.00 |
|  5 | Hai An   |  27 | Ha Noi    |  8500.00 |
|  6 | Hoang    |  22 | Ha Noi    |  4500.00 |
|  7 | Binh     |  24 | Ha Noi    | 10000.00 |
+----+----------+-----+-----------+----------+

Sau đây là một ví dụ, có thể xóa các bản ghi từ bảng có tuổi = 25 và sau đó XÓA các thay đổi trong cơ sở dữ liệu

DELETE FROM CUSTOMERS
   WHERE AGE = 25;
ROLLBACK;

Vì vậy, hoạt động xóa sẽ không ảnh hưởng đến bảng và câu lệnh CHỌN sẽ cho kết quả sau

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ha Anh   |  32 | Da Nang   |  2000.00 |
|  2 | Van Ha   |  25 | Ha Noi    |  1500.00 |
|  3 | Vu Bang  |  23 | Vinh      |  2000.00 |
|  4 | Thu Minh |  25 | Ha Noi    |  6500.00 |
|  5 | Hai An   |  27 | Ha Noi    |  8500.00 |
|  6 | Hoang    |  22 | Ha Noi    |  4500.00 |
|  7 | Binh     |  24 | Ha Noi    | 10000.00 |
+----+----------+-----+-----------+----------+


3. Lệnh SAVEPOINT

SAVEPOINT là một điểm trong một giao dịch khi bạn có thể cuộn giao dịch trở lại một điểm nhất định mà không quay lại toàn bộ giao dịch

Cú pháp của lệnh SAVEPOINT có thể hiển thị dưới đây

________số 8_______

Lệnh này chỉ phục vụ trong quá trình tạo SAVEPOINT trong số tất cả các lệnh giao dịch. Lệnh ROLLBACK được sử dụng để hoàn thành một nhóm các giao dịch

Cú pháp để cuộn lại một SAVEPOINT như có thể hiển thị dưới đây

ROLLBACK TO SAVEPOINT_NAME;

Sau đây là ví dụ bạn định xóa ba bản ghi khác nhau từ bảng KHÁCH HÀNG. Bạn muốn tạo SAVEPOINT trước mỗi lần xóa, để bạn có thể XÓA trở lại SAVEPOINT bất kỳ lúc nào để trả lại dữ liệu thích hợp cho trạng thái ban đầu

Ví dụ

Sử dụng bảng KHÁCH HÀNG có các bản ghi sau

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ha Anh   |  32 | Da Nang   |  2000.00 |
|  2 | Van Ha   |  25 | Ha Noi    |  1500.00 |
|  3 | Vu Bang  |  23 | Vinh      |  2000.00 |
|  4 | Thu Minh |  25 | Ha Noi    |  6500.00 |
|  5 | Hai An   |  27 | Ha Noi    |  8500.00 |
|  6 | Hoang    |  22 | Ha Noi    |  4500.00 |
|  7 | Binh     |  24 | Ha Noi    | 10000.00 |
+----+----------+-----+-----------+----------+

Sau đây block code có chứa các chuỗi hoạt động

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ha Anh   |  32 | Da Nang   |  2000.00 |
|  2 | Van Ha   |  25 | Ha Noi    |  1500.00 |
|  3 | Vu Bang  |  23 | Vinh      |  2000.00 |
|  4 | Thu Minh |  25 | Ha Noi    |  6500.00 |
|  5 | Hai An   |  27 | Ha Noi    |  8500.00 |
|  6 | Hoang    |  22 | Ha Noi    |  4500.00 |
|  7 | Binh     |  24 | Ha Noi    | 10000.00 |
+----+----------+-----+-----------+----------+
1

Bây giờ, ba lần xóa đã xảy ra, giả sử rằng bạn đã thay đổi quyết định và quyết định khôi phục lại SAVEPOINT mà bạn đã định nghĩa là SP2. Bởi vì SP2 được tạo ra sau khi xóa lần đầu, hai lần xóa cuối cùng được khôi phục

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ha Anh   |  32 | Da Nang   |  2000.00 |
|  2 | Van Ha   |  25 | Ha Noi    |  1500.00 |
|  3 | Vu Bang  |  23 | Vinh      |  2000.00 |
|  4 | Thu Minh |  25 | Ha Noi    |  6500.00 |
|  5 | Hai An   |  27 | Ha Noi    |  8500.00 |
|  6 | Hoang    |  22 | Ha Noi    |  4500.00 |
|  7 | Binh     |  24 | Ha Noi    | 10000.00 |
+----+----------+-----+-----------+----------+
2

Lưu ý rằng chỉ có lần xóa đầu tiên xảy ra từ khi bạn khôi phục lại SP2

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ha Anh   |  32 | Da Nang   |  2000.00 |
|  2 | Van Ha   |  25 | Ha Noi    |  1500.00 |
|  3 | Vu Bang  |  23 | Vinh      |  2000.00 |
|  4 | Thu Minh |  25 | Ha Noi    |  6500.00 |
|  5 | Hai An   |  27 | Ha Noi    |  8500.00 |
|  6 | Hoang    |  22 | Ha Noi    |  4500.00 |
|  7 | Binh     |  24 | Ha Noi    | 10000.00 |
+----+----------+-----+-----------+----------+
3

Ra lệnh PHÁT HÀNH SAVEPOINT

Sử dụng lệnh SAVEPOINT RELEASE để loại bỏ một SAVEPOINT mà bạn đã tạo ra

Cú pháp của lệnh SAVEPOINT RELEASE as after

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ha Anh   |  32 | Da Nang   |  2000.00 |
|  2 | Van Ha   |  25 | Ha Noi    |  1500.00 |
|  3 | Vu Bang  |  23 | Vinh      |  2000.00 |
|  4 | Thu Minh |  25 | Ha Noi    |  6500.00 |
|  5 | Hai An   |  27 | Ha Noi    |  8500.00 |
|  6 | Hoang    |  22 | Ha Noi    |  4500.00 |
|  7 | Binh     |  24 | Ha Noi    | 10000.00 |
+----+----------+-----+-----------+----------+
4

Khi SAVEPOINT bị xóa, bạn không thể sử dụng lệnh ROLLBACK để hoàn tác các giao dịch được thực hiện kể từ lần SAVEPOINT cuối cùng


4. Lệnh THIẾT LẬP GIAO DỊCH

Có thể sử dụng lệnh SET TRANSACTION để bắt đầu một cơ sở dữ liệu giao dịch. Lệnh này được sử dụng để chỉ định các đặc tính cho giao dịch sau. Ví dụ, bạn có thể chỉ định một giao dịch chỉ được đọc hoặc đọc viết