Hướng dẫn how do i rollback a mysql transaction? - làm cách nào để khôi phục giao dịch mysql?
Show 15.7.2.2 & NBSP; AutoCommit, Cam kết và Rollback Trong Một phiên có 0 rõ ràng và kết thúc nó bằng câu lệnh 1 hoặc 2. Xem Phần & NBSP; 13.3.1, Báo cáo giao dịch bắt đầu, cam kết và rollback. Nếu chế độ 4, phiên luôn mở giao dịch. Tuyên bố 1 hoặc 2 kết thúc giao dịch hiện tại và một tuyên bố mới bắt đầu. Nếu một phiên có Một số tuyên bố ngầm kết thúc một giao dịch, như thể bạn đã thực hiện 1 trước khi thực hiện tuyên bố. Để biết chi tiết, xem Phần & NBSP; 13.3.3, các câu lệnh gây ra một cam kết ngầm.Một 1 có nghĩa là những thay đổi được thực hiện trong giao dịch hiện tại được thực hiện vĩnh viễn và có thể nhìn thấy được các phiên khác. Một tuyên bố 2, mặt khác, hủy bỏ tất cả các sửa đổi được thực hiện bởi giao dịch hiện tại. Cả 1 và 2 Phát hành tất cả các khóa InnoDB được đặt trong giao dịch hiện tại.Nhóm hoạt động DML với các giao dịchTheo mặc định, kết nối với máy chủ MySQL bắt đầu bằng chế độ AutoCommit được bật, tự động thực hiện mọi câu lệnh SQL khi bạn thực hiện nó. Chế độ hoạt động này có thể không quen thuộc nếu bạn có kinh nghiệm với các hệ thống cơ sở dữ liệu khác, trong đó thực tiễn tiêu chuẩn để phát hành một chuỗi các câu lệnh DML và cam kết chúng hoặc cuộn lại tất cả lại với nhau. Để sử dụng các giao dịch nhiều tuyên bố, hãy tắt AutoCommit với câu lệnh SQL 4 và kết thúc mỗi giao dịch bằng 1 hoặc 2 nếu phù hợp. Để để AutoCommit BẬT, hãy bắt đầu mỗi giao dịch với 7 và kết thúc bằng 1 hoặc 2. Ví dụ sau đây cho thấy hai giao dịch. Đầu tiên được cam kết; Thứ hai được cuộn trở lại.
TransActions trong các ngôn ngữ phía máy kháchTrong các API như PHP, Perl DBI, JDBC, ODBC hoặc giao diện cuộc gọi C tiêu chuẩn của MySQL, bạn có thể gửi các báo cáo kiểm soát giao dịch như 1 đến máy chủ MySQL dưới dạng chuỗi giống như bất kỳ câu lệnh SQL nào khác như 1 hoặc 2. Một số API cũng cung cấp các chức năng hoặc phương thức cam kết giao dịch đặc biệt riêng biệt. 13.3.1 & nbsp; bắt đầu các câu lệnh giao dịch, cam kết và rollback
Các tuyên bố này cung cấp quyền kiểm soát việc sử dụng các giao dịch:
Theo mặc định, MySQL chạy với chế độ AutoCommit được bật. Điều này có nghĩa là, khi không có trong một giao dịch, mỗi câu lệnh là nguyên tử, như thể nó được bao quanh bởi 8 và 1. Bạn không thể sử dụng 2 để hoàn tác hiệu ứng; Tuy nhiên, nếu xảy ra lỗi trong quá trình thực thi tuyên bố, câu lệnh sẽ được quay lại.Để vô hiệu hóa chế độ AutoCommit ngầm cho một loạt các câu lệnh, hãy sử dụng câu lệnh 3:
Với 3, AutoCommit vẫn bị vô hiệu hóa cho đến khi bạn kết thúc giao dịch với 1 hoặc 2. Chế độ AutoCommit sau đó trở lại trạng thái trước đó.
3 cho phép một số sửa đổi kiểm soát các đặc điểm giao dịch. Để chỉ định nhiều công cụ sửa đổi, hãy tách chúng bằng dấu phẩy.
Quan trọng Nhiều API được sử dụng để viết các ứng dụng máy khách MySQL (như JDBC) cung cấp các phương thức riêng để bắt đầu các giao dịch có thể (và đôi khi nên) được sử dụng thay vì gửi câu lệnh 3 từ máy khách. Xem Chương & NBSP; 29, Trình kết nối và API hoặc tài liệu cho API của bạn, để biết thêm thông tin.Để vô hiệu hóa chế độ AutoCommit một cách rõ ràng, hãy sử dụng câu lệnh sau:
Sau khi vô hiệu hóa chế độ AutoCommit bằng cách đặt biến 1 để lưu trữ các thay đổi của mình vào đĩa hoặc 2 để bỏ qua các thay đổi.
0 và autocommit 6 được hỗ trợ dưới dạng bí danh của 3 để bắt đầu giao dịch. 3 là cú pháp SQL tiêu chuẩn, là cách được khuyến nghị để bắt đầu giao dịch đặc biệt và cho phép các công cụ sửa đổi mà 0 không có.Câu lệnh 0 khác với việc sử dụng từ khóa 0 bắt đầu một câu lệnh ghép autocommit 2. Cái sau không bắt đầu một giao dịch. Xem Phần & NBSP; 13.6.1, Bắt đầu ... Kết thúc Tuyên bố hợp chất.Ghi chú Trong tất cả các chương trình được lưu trữ (các quy trình và chức năng được lưu trữ, kích hoạt và sự kiện), trình phân tích cú pháp coi Từ khóa 1 và 2, cũng như các điều khoản autocommit 9 và START
TRANSACTION 0. autocommit 9 và START
TRANSACTION 0 có thể được sử dụng để kiểm soát bổ sung về hoàn thành giao dịch. Giá trị của biến hệ thống START
TRANSACTION 3 xác định hành vi hoàn thành mặc định. Xem Phần & NBSP; 5.1.8, Biến hệ thống máy chủ của Cameron. Điều khoản Bắt đầu một giao dịch gây ra bất kỳ giao dịch đang chờ xử lý. Xem Phần & NBSP; 13.3.3, Các câu lệnh gây ra một cam kết ngầm, để biết thêm thông tin. Bắt đầu một giao dịch cũng khiến các khóa bảng có được với 02 được phát hành, như thể bạn đã thực thi 03. Bắt đầu một giao dịch không phát hành khóa đọc toàn cầu có được với 04.Để có kết quả tốt nhất, các giao dịch nên được thực hiện chỉ bằng các bảng được quản lý bởi một công cụ lưu trữ an toàn giao dịch. Nếu không, các vấn đề sau đây có thể xảy ra:
Mỗi giao dịch được lưu trữ trong nhật ký nhị phân trong một đoạn, vào 1. Các giao dịch được quay lại không được ghi lại. . Phần & NBSP; 5.4.4, Nhật ký nhị phân.Exception: Modifications to nontransactional tables cannot be rolled back. If a transaction that is rolled
back includes modifications to nontransactional tables, the entire transaction is logged with a 2 statement at the end to ensure that modifications to the nontransactional tables are replicated.) See Section 5.4.4, “The Binary
Log”. Bạn có thể thay đổi mức độ cô lập hoặc chế độ truy cập cho các giao dịch với câu lệnh 13. Xem Phần & NBSP; 13.3.7, SET SET Tuyên bố giao dịch.Lấy lại có thể là một hoạt động chậm có thể xảy ra ngầm mà không có người dùng yêu cầu rõ ràng (ví dụ: khi xảy ra lỗi). Do đó, 14 hiển thị 15 trong cột 16 cho phiên, không chỉ đối với các cuộc chạy lại rõ ràng được thực hiện với câu lệnh 2 mà còn cho các cuộc chạy lại ngầm. Khi Nếu câu lệnh 1 trong giao dịch gọi hàm được lưu trữ và một câu lệnh trong hàm được lưu trữ không thành công, câu lệnh đó sẽ quay lại. Nếu 2 được thực hiện cho giao dịch sau đó, toàn bộ giao dịch sẽ quay lại.
Có hoàn tác trong MySQL không?Các nhật ký hoàn tác tồn tại trong các phân đoạn nhật ký hoàn tác, được chứa trong các phân đoạn rollback.Các phân đoạn rollback nằm trong không gian bảng hệ thống, trong các không gian bảng hoàn tác và trong không gian bảng tạm thời.Hoàn tác nhật ký nằm trong không gian bảng tạm thời được sử dụng cho các giao dịch sửa đổi dữ liệu trong các bảng tạm thời do người dùng xác định.. Rollback segments reside in the system tablespace, in undo tablespaces, and in the temporary tablespace. Undo logs that reside in the temporary tablespace are used for transactions that modify data in user-defined temporary tables.
Làm thế nào để tôi quay lại một giao dịch SQL?Trong ví dụ dưới đây, chúng tôi thực hiện các nhiệm vụ sau ... Khai báo một biến bảng @Demo .. Chèn một bản ghi vào nó .. Bắt đầu một giao dịch rõ ràng bằng cách sử dụng giao dịch bắt đầu .. Cập nhật bản ghi trong biến bảng .. Giao dịch rollback .. Kiểm tra giá trị của bản ghi trong biến bảng .. 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à tự động cam kết ngay sau khi nó được thực thi.Vì vậy, nếu bạn cần tự thực hiện các giao dịch, bạn phải tắt chế độ AutoCommit bằng 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.turn off the autocommit mode by AUTOCOMMIT = 0 . Refer this link for more info. Save this answer. |