Đôi khi bạn có thể cần phải hoàn tác các thay đổi đã thực hiện đối với cơ sở dữ liệu MySQL. Bạn có thể dễ dàng làm điều đó bằng cách sử dụng truy vấn Rollback MySQL. Dưới đây là cách khôi phục cơ sở dữ liệu MySQL bằng lệnh MySQL Rollback.
MySQL rollback hoạt động như thế nào
Câu lệnh MySQL Rollback cho phép bạn khôi phục hoặc hoàn tác thêm một câu lệnh đã được thực thi gần đây. Ví dụ:nếu bạn đã vô tình xóa hoặc cập nhật các hàng, bạn có thể sử dụng MySQL khôi phục các câu lệnh đó và khôi phục cơ sở dữ liệu ban đầu. Tuy nhiên, MySQL rollback chỉ hoạt động nếu các thay đổi cơ sở dữ liệu KHÔNG được cam kết với cơ sở dữ liệu.
Phần thưởng đọc:Cách sử dụng MySQL Rollup
Chúng ta có thể khôi phục sau khi cam kết trong MySQL không
Không. Rất tiếc, bạn không thể hoàn tác các thay đổi đã được cam kết với cơ sở dữ liệu.
Cách khôi phục cơ sở dữ liệu MySQL
Xin lưu ý, theo mặc định, MySQL được cấu hình để tự động cam kết mọi truy vấn SQL. Vì vậy, điều quan trọng là phải tắt tự động cam kết trong MySQL bằng câu lệnh sau, nếu bạn muốn có thể sử dụng MySQL Rollback.
Đăng nhập vào cơ sở dữ liệu MySQL và chạy lệnh sau để tắt tính năng tự động gửi
SET autocommit = 0
Hoặc
SET autocommit = OFF
Bạn sử dụng câu lệnh sau để bật chế độ tự động gửi một cách rõ ràng:
SET autocommit = 1
Hoặc
SET autocommit = ON
Phần thưởng đọc:Cách kiểm tra phiên bản MySQL
Giả sử bạn có bảng sau doanh số bán hàng (sản phẩm, ngày_đặt_hàng, chương trình giảm giá) . Chúng ta sẽ xem xét cách phát hành MySQL rollback sau khi xóa lệnh.
mysql> select * from sales; +---------+------------+------+ | product | order_date | sale | +---------+------------+------+ | A | 2020-01-01 | 20 | | B | 2020-01-02 | 25 | | B | 2020-01-03 | 15 | | A | 2020-01-04 | 30 | | A | 2020-01-05 | 20 | +---------+------------+------+
Bây giờ chúng ta hãy tắt tính năng tự động gửi như đã đề cập ở trên,
mysql> set autocommit=0;
Tiếp theo, hãy để chúng tôi xóa tất cả các hàng trong bảng bán hàng.
mysql> delete from sales; Query OK, 5 rows affected (0.00 sec) mysql> select count(*) from sales; +----------+ | count(*) | +----------+ | 0 | +----------+
Như bạn có thể thấy, tất cả 5 hàng trong bảng bán hàng đã bị xóa.
Bây giờ, hãy để chúng tôi phát hành MySQL Rollback sau khi xóa lệnh
mysql> rollback; Query OK, 0 rows affected (0.07 sec) mysql> select count(*) from sales; +----------+ | count(*) | +----------+ | 5 | +----------+
Như bạn có thể thấy, 5 hàng đã xóa đã được khôi phục vì các thay đổi không được cam kết. Tuy nhiên, nếu bạn gặp sự cố câu lệnh COMMIT sau khi xóa và trước lệnh ROLLBACK, thì MySQL sẽ không khôi phục bảng của bạn.
Phần thưởng đã đọc:Cách tắt kiểm tra khóa ngoại trong MySQL
Lệnh cập nhật khôi phục MySQL
Tương tự, bạn có thể khôi phục lệnh cập nhật. Hãy để chúng tôi cập nhật giảm giá ở trên doanh số bán hàng bảng.
mysql> set autocommit=0; mysql> select * from sales; +---------+------------+------+ | product | order_date | sale | +---------+------------+------+ | A | 2020-01-01 | 20 | | B | 2020-01-02 | 25 | | B | 2020-01-03 | 15 | | A | 2020-01-04 | 30 | | A | 2020-01-05 | 20 | +---------+------------+------+ 5 rows in set (0.00 sec) mysql> update sales set sale=sale*2; Query OK, 5 rows affected (0.05 sec) mysql> select * from sales; +---------+------------+------+ | product | order_date | sale | +---------+------------+------+ | A | 2020-01-01 | 40 | | B | 2020-01-02 | 50 | | B | 2020-01-03 | 30 | | A | 2020-01-04 | 60 | | A | 2020-01-05 | 40 | +---------+------------+------+
Như bạn có thể thấy, chúng tôi đã tăng gấp đôi giá trị của cột bán hàng. Bây giờ, hãy để chúng tôi khôi phục lệnh cập nhật.
mysql> rollback; mysql> select * from sales; +---------+------------+------+ | product | order_date | sale | +---------+------------+------+ | A | 2020-01-01 | 20 | | B | 2020-01-02 | 25 | | B | 2020-01-03 | 15 | | A | 2020-01-04 | 30 | | A | 2020-01-05 | 20 | +---------+------------+------+
Như bạn có thể thấy cột bán hàng, các giá trị cũ đã được khôi phục.
Bạn cũng có thể bao gồm MySQL Rollback trong các thủ tục được lưu trữ và các giao dịch MySQL cho MySQL Rollback khi bị lỗi. Chìa khóa là vô hiệu hóa tính năng tự động gửi để thực thi khôi phục MySQL.
Ubiq giúp dễ dàng trực quan hóa dữ liệu trong vài phút và theo dõi trong trang tổng quan thời gian thực. Thử nó ngay hôm nay!