Có thể khôi phục trong mysql không?

Giao dịch trong MySQL là một nhóm tuần tự các câu lệnh, truy vấn hoặc thao tác như chọn, chèn, cập nhật hoặc xóa để thực hiện như một đơn vị công việc duy nhất có thể được cam kết hoặc khôi phục. Nếu giao dịch thực hiện nhiều sửa đổi vào cơ sở dữ liệu, có hai điều xảy ra

  • Tất cả các sửa đổi đều thành công khi giao dịch được thực hiện
  • Hoặc, tất cả các sửa đổi được hoàn tác khi giao dịch được khôi phục

Nói cách khác, một giao dịch không thể thành công nếu không hoàn thành từng thao tác có sẵn trong tập hợp. Có nghĩa là nếu bất kỳ câu lệnh nào không thành công, thao tác giao dịch không thể tạo ra kết quả

Một giao dịch trong MySQL bắt đầu bằng câu lệnh SQL thực thi đầu tiên và kết thúc khi nó tìm thấy một cam kết hoặc được khôi phục rõ ràng hoặc ngầm định. Nó sử dụng rõ ràng câu lệnh COMMIT hoặc ROLLBACK và ngầm định khi sử dụng câu lệnh DDL

Hãy để chúng tôi hiểu khái niệm về một giao dịch thông qua giải thích sau đây

Chúng ta có thể hiểu khái niệm giao dịch trong MySQL bằng cách xem xét cơ sở dữ liệu ngân hàng. Giả sử một khách hàng của ngân hàng muốn chuyển tiền từ tài khoản này sang tài khoản khác. Chúng ta có thể đạt được điều này bằng cách sử dụng các câu lệnh SQL sẽ được chia thành các bước sau

  • Đầu tiên, cần kiểm tra tính khả dụng của số tiền được yêu cầu trong tài khoản đầu tiên
  • Tiếp theo nếu còn số tiền thì trừ vào tài khoản thứ nhất. Sau đó, cập nhật tài khoản đầu tiên
  • Cuối cùng, gửi số tiền vào tài khoản thứ hai. Sau đó cập nhật tài khoản thứ hai để hoàn tất giao dịch
  • Nếu bất kỳ quy trình nào ở trên không thành công, giao dịch sẽ được khôi phục về trạng thái trước đó

Thuộc tính của giao dịch

Giao dịch chứa chủ yếu bốn thuộc tính, được gọi là thuộc tính ACID. Bây giờ, chúng ta sẽ thảo luận chi tiết về thuộc tính ACID. Thuộc tính ACID là viết tắt của

  1. nguyên tử
  2. Tính nhất quán
  3. Sự cách ly
  4. Độ bền

nguyên tử. Thuộc tính này đảm bảo rằng tất cả các câu lệnh hoặc hoạt động trong đơn vị giao dịch phải được thực hiện thành công. Mặt khác, nếu bất kỳ hoạt động nào không thành công, toàn bộ giao dịch sẽ bị hủy bỏ và nó sẽ quay trở lại trạng thái trước đó. Nó bao gồm các tính năng

  • Tuyên bố CAM KẾT
  • Tuyên bố QUAY LẠI
  • Cài đặt tự động cam kết
  • Dữ liệu hoạt động từ các bảng INFORMATION_SCHEMA

Tính nhất quán. Thuộc tính này đảm bảo rằng cơ sở dữ liệu chỉ thay đổi trạng thái khi một giao dịch sẽ được thực hiện thành công. Nó cũng chịu trách nhiệm bảo vệ dữ liệu khỏi sự cố. Nó bao gồm các tính năng

  • Bộ đệm ghi kép InnoDB
  • Phục hồi sự cố InnoDB

Sự cách ly. Tính chất này đảm bảo từng nghiệp vụ trong đơn vị giao dịch hoạt động độc lập. Nó cũng đảm bảo rằng các câu lệnh minh bạch với nhau. Nó bao gồm các tính năng

  • Câu lệnh SET ISOLATION LEVEL
  • Cài đặt tự động cam kết
  • Các chi tiết cấp thấp của khóa InnoDB

Độ bền. Thuộc tính này đảm bảo rằng kết quả của các giao dịch đã cam kết sẽ tồn tại vĩnh viễn ngay cả khi hệ thống gặp sự cố hoặc lỗi. Nó bao gồm các tính năng

  • Bộ đệm ghi trong thiết bị lưu trữ
  • Bộ nhớ đệm được hỗ trợ bằng pin trong thiết bị lưu trữ
  • Tùy chọn cấu hình innodb_file_per_table
  • Tùy chọn cấu hình innodb_flush_log_at_trx_commit
  • Tùy chọn cấu hình sync_binlog

Tuyên bố giao dịch MySQL

Các giao dịch kiểm soát MySQL với sự trợ giúp của câu lệnh sau

  • MySQL cung cấp câu lệnh BẮT ĐẦU GIAO DỊCH để bắt đầu giao dịch. Nó cũng cung cấp "BEGIN" và "BEGIN WORK" làm bí danh của BẮT ĐẦU GIAO DỊCH
  • Chúng tôi sẽ sử dụng câu lệnh COMMIT để thực hiện giao dịch hiện tại. Nó cho phép cơ sở dữ liệu thay đổi vĩnh viễn
  • Chúng tôi sẽ sử dụng câu lệnh ROLLBACK để khôi phục giao dịch hiện tại. Nó cho phép cơ sở dữ liệu hủy bỏ tất cả các thay đổi và chuyển sang trạng thái trước đó của chúng
  • Chúng tôi sẽ sử dụng câu lệnh SET auto-commit để tắt/bật chế độ tự động cam kết cho giao dịch hiện tại. Theo mặc định, câu lệnh COMMIT được thực thi tự động. Vì vậy, nếu chúng tôi không muốn tự động thực hiện các thay đổi, hãy sử dụng câu lệnh bên dưới

Một lần nữa, sử dụng câu lệnh dưới đây để bật chế độ tự động cam kết

Ví dụ giao dịch MySQL

Giả sử chúng ta có hai bảng tên là "nhân viên" và "Đơn hàng" chứa dữ liệu sau

Bàn. người lao động

Có thể khôi phục trong mysql không?

Bàn. mệnh lệnh

Có thể khôi phục trong mysql không?

CAM KẾT Ví dụ

Nếu chúng ta muốn sử dụng một giao dịch, bắt buộc phải chia các câu lệnh SQL thành các phần hợp lý. Sau đó, chúng tôi có thể xác định xem dữ liệu sẽ được cam kết hay khôi phục

Các bước sau đây minh họa để tạo một giao dịch

  1. Bắt đầu giao dịch bằng câu lệnh BẮT ĐẦU GIAO DỊCH
  2. Sau đó, chọn thu nhập tối đa trong số các nhân viên
  3. Thêm một bản ghi mới vào bảng nhân viên
  4. Thêm một bản ghi mới vào bảng đơn đặt hàng
  5. Sử dụng câu lệnh COMMIT để hoàn thành giao dịch

Dưới đây là các lệnh thực hiện các thao tác trên

Hình ảnh dưới đây giải thích nó rõ ràng hơn

Có thể khôi phục trong mysql không?

Ví dụ về QUAY LẠI

Chúng ta có thể hiểu giao dịch quay lui với sự trợ giúp của hình minh họa sau. Đầu tiên, mở dấu nhắc lệnh MySQL và đăng nhập vào máy chủ cơ sở dữ liệu bằng mật khẩu. Tiếp theo, chúng ta phải chọn một cơ sở dữ liệu

Giả sử cơ sở dữ liệu của chúng tôi chứa bảng "Đơn hàng". Bây giờ, sau đây là các tập lệnh thực hiện các thao tác khôi phục

Sau khi thực hiện câu lệnh trên, chúng ta sẽ nhận được kết quả như bên dưới hiển thị tất cả các bản ghi từ bảng Đơn đặt hàng đã được xóa thành công

Có thể khôi phục trong mysql không?

Bây giờ, chúng ta cần mở một phiên riêng của máy chủ cơ sở dữ liệu MySQL và thực hiện câu lệnh bên dưới để xác minh dữ liệu trong bảng Đơn hàng

Nó sẽ cho đầu ra như dưới đây

Có thể khôi phục trong mysql không?

Mặc dù chúng tôi đã thực hiện các thay đổi trong phiên đầu tiên, chúng tôi vẫn có thể thấy các bản ghi có sẵn trong bảng. Đó là bởi vì các thay đổi không phải là vĩnh viễn cho đến khi chúng ta chưa thực hiện câu lệnh COMMIT hoặc ROLLBACK trong phiên đầu tiên

Do đó, nếu chúng ta muốn thay đổi vĩnh viễn, hãy sử dụng câu lệnh COMMIT. Nếu không, hãy thực thi câu lệnh ROLLBACK để khôi phục các thay đổi trong phiên đầu tiên

Sau khi thực hiện thành công, nó sẽ tạo ra kết quả sau, nơi chúng ta có thể thấy rằng thay đổi đã được khôi phục

Có thể khôi phục trong mysql không?

Các câu lệnh không thể khôi phục khi sử dụng Giao dịch MySQL

Giao dịch MySQL không thể khôi phục tất cả các câu lệnh. Ví dụ: các câu lệnh này bao gồm các lệnh DDL (Ngôn ngữ Định nghĩa Dữ liệu) chẳng hạn như cơ sở dữ liệu CREATE, ALTER hoặc DROP cũng như các bảng CREATE, UPDATE hoặc DROP hoặc các quy trình được lưu trữ. Chúng tôi phải đảm bảo rằng khi chúng tôi thiết kế giao dịch của mình, những tuyên bố này không bao gồm

SAVEPOINT, QUAY LẠI VỀ SAVEPOINT, PHÁT HÀNH SAVEPOINT

Câu lệnh SAVEPOINT tạo một dấu đặc biệt với tên của mã định danh bên trong một giao dịch. Nó cho phép tất cả các câu lệnh được thực thi sau điểm lưu trữ sẽ được khôi phục. Vì vậy, giao dịch khôi phục về trạng thái trước đó tại điểm lưu trữ. Nếu chúng tôi đã đặt nhiều điểm lưu trữ trong giao dịch hiện tại có cùng tên, thì điểm lưu trữ mới chịu trách nhiệm khôi phục

Câu lệnh ROLLBACK TO SAVEPOINT cho phép chúng tôi khôi phục tất cả các giao dịch về điểm lưu trữ đã cho đã được thiết lập mà không hủy bỏ giao dịch

Câu lệnh RELEASE SAVEPOINT phá hủy điểm lưu trữ đã đặt tên khỏi giao dịch hiện tại mà không hoàn tác tác động của các truy vấn được thực hiện sau khi điểm lưu trữ được thiết lập. Sau những câu lệnh này, không có lệnh rollback nào xảy ra. Nếu điểm lưu trữ không tồn tại trong giao dịch, nó sẽ báo lỗi

Sau đây là cú pháp của các câu lệnh trên trong Giao dịch MySQL

Thí dụ

Hãy cho chúng tôi hiểu cách sử dụng các câu lệnh này thông qua ví dụ. Trong ví dụ dưới đây, chúng ta sẽ sử dụng các câu lệnh SAVEPOINT và ROLLBACK TO SAVEPOINT giải thích cách một điểm lưu trữ xác định bản ghi nào của giao dịch hiện tại có thể được khôi phục

Ở trên,

  • Trước tiên, chúng tôi phải bắt đầu giao dịch và sau đó hiển thị các bản ghi có sẵn trong bảng Đơn hàng
  • Tiếp theo, chúng tôi đã chèn một bản ghi vào bảng và sau đó tạo một điểm lưu
  • Một lần nữa, chúng tôi đã chèn một bản ghi vào bảng và sau đó sử dụng câu lệnh ROLLBACK TO SAVEPOINT để xóa các thay đổi tại điểm lưu trữ được thiết lập
  • Một lần nữa, chúng tôi đã chèn một bản ghi vào bảng
  • Cuối cùng, thực hiện câu lệnh COMMIT để thực hiện các thay đổi vĩnh viễn

Đầu ra bên dưới giải thích các bước trên theo thứ tự tuần tự giúp hiểu nó rất dễ dàng

Có thể khôi phục trong mysql không?

Bây giờ, chúng ta sẽ sử dụng câu lệnh SELECT để xác minh thao tác trên. Ở đầu ra, chúng ta có thể thấy rằng tất cả các câu lệnh trong giao dịch được thực hiện thành công. Ở đây, cả câu lệnh INSERT và UPDATE đều sửa đổi bảng tại COMMIT

Chúng ta có thể khôi phục xóa trong MySQL không?

Bạn có thể hoàn tác XÓA trong MySQL không? . Bạn có thể sẽ phải sử dụng bản sao lưu để khôi phục dữ liệu. Các trường hợp ngoại lệ đối với điều này là nếu bạn đang xóa bên trong một Giao dịch đang mở, thì trong những trường hợp đó bạn có thể "Hoàn tác" giao dịch để hoàn tác mọi thay đổi được thực hiện bên trong giao dịch.

Tại sao rollback không hoạt động trong MySQL?

Điều này có nghĩa là mỗi câu lệnh SQL riêng lẻ được coi là một giao dịch và được tự động thực hiện ngay sau khi nó được thực thi. Vì vậy, nếu bạn cần tự mình thực hiện giao dịch, bạn phải tắt chế độ tự động xác nhận bởi AUTOCOMMIT = 0 . Tham khảo liên kết này để biết thêm thông tin. Lưu câu trả lời này.