15.7.2.2 & NBSP; AutoCommit, Cam kết và Rollback
Trong InnoDB
, tất cả các hoạt động của người dùng xảy ra trong một giao dịch. Nếu chế độ autocommit
được bật, mỗi câu lệnh SQL sẽ tự mình tạo một giao dịch. Theo mặc định, MySQL bắt đầu phiên cho mỗi kết nối mới với autocommit
được bật, do đó MySQL thực hiện cam kết sau mỗi câu lệnh SQL nếu câu lệnh đó không trả về lỗi. Nếu một câu lệnh trả về một lỗi, hành vi cam kết hoặc rollback phụ thuộc vào lỗi. Xem Phần & NBSP; 15.21.5, Xử lý lỗi InnoDB.
Một phiên đã bật autocommit
có thể thực hiện giao dịch nhiều câu nói bằng cách bắt đầu nó với câu lệnh START
TRANSACTION
hoặc BEGIN
rõ ràng và kết thúc nó bằng câu lệnh COMMIT
hoặc ROLLBACK
. 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ế độ autocommit
bị vô hiệu hóa trong phiên với
mysql> CREATE TABLE customer [a INT, b CHAR [20], INDEX [a]];
Query OK, 0 rows affected [0.00 sec]
mysql> -- Do a transaction with autocommit turned on.
mysql> START TRANSACTION;
Query OK, 0 rows affected [0.00 sec]
mysql> INSERT INTO customer VALUES [10, 'Heikki'];
Query OK, 1 row affected [0.00 sec]
mysql> COMMIT;
Query OK, 0 rows affected [0.00 sec]
mysql> -- Do another transaction with autocommit turned off.
mysql> SET autocommit=0;
Query OK, 0 rows affected [0.00 sec]
mysql> INSERT INTO customer VALUES [15, 'John'];
Query OK, 1 row affected [0.00 sec]
mysql> INSERT INTO customer VALUES [20, 'Paul'];
Query OK, 1 row affected [0.00 sec]
mysql> DELETE FROM customer WHERE b = 'Heikki';
Query OK, 1 row affected [0.00 sec]
mysql> -- Now we undo those last 2 inserts and the delete.
mysql> ROLLBACK;
Query OK, 0 rows affected [0.00 sec]
mysql> SELECT * FROM customer;
+------+--------+
| a | b |
+------+--------+
| 10 | Heikki |
+------+--------+
1 row in set [0.00 sec]
mysql>
1, phiên luôn mở giao dịch. Tuyên bố COMMIT
hoặc ROLLBACK
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ó autocommit
bị vô hiệu hóa kết thúc mà không thực hiện rõ ràng giao dịch cuối cùng, MySQL sẽ quay lại giao dịch đó.
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 COMMIT
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.
A COMMIT
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ố ROLLBACK
, 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ả COMMIT
và ROLLBACK
đều phát hành tất cả các khóa InnoDB
được đặt trong giao dịch hiện tại.
Theo 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 InnoDB
1 và kết thúc mỗi giao dịch bằng COMMIT
hoặc ROLLBACK
nếu phù hợp. Để để AutoCommit bật, hãy bắt đầu mỗi giao dịch với InnoDB
4 và kết thúc bằng COMMIT
hoặc ROLLBACK
. 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.
$> mysql test
mysql> CREATE TABLE customer [a INT, b CHAR [20], INDEX [a]];
Query OK, 0 rows affected [0.00 sec]
mysql> -- Do a transaction with autocommit turned on.
mysql> START TRANSACTION;
Query OK, 0 rows affected [0.00 sec]
mysql> INSERT INTO customer VALUES [10, 'Heikki'];
Query OK, 1 row affected [0.00 sec]
mysql> COMMIT;
Query OK, 0 rows affected [0.00 sec]
mysql> -- Do another transaction with autocommit turned off.
mysql> SET autocommit=0;
Query OK, 0 rows affected [0.00 sec]
mysql> INSERT INTO customer VALUES [15, 'John'];
Query OK, 1 row affected [0.00 sec]
mysql> INSERT INTO customer VALUES [20, 'Paul'];
Query OK, 1 row affected [0.00 sec]
mysql> DELETE FROM customer WHERE b = 'Heikki';
Query OK, 1 row affected [0.00 sec]
mysql> -- Now we undo those last 2 inserts and the delete.
mysql> ROLLBACK;
Query OK, 0 rows affected [0.00 sec]
mysql> SELECT * FROM customer;
+------+--------+
| a | b |
+------+--------+
| 10 | Heikki |
+------+--------+
1 row in set [0.00 sec]
mysql>
TransActions trong các ngôn ngữ phía máy khách Trong 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ư COMMIT
tới 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ư InnoDB
8 hoặc InnoDB
9. 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.
Giới thiệu về cam kết MySQL
Từ khóa cam kết là lệnh MySQL được sử dụng để kiểm soát và quản lý hành vi giao dịch. Một giao dịch được định nghĩa là một nhóm hoạt động liên tiếp để thao tác cơ sở dữ liệu dường như là một đơn vị duy nhất. Nó được kết hợp một cách hợp lý với nhiều hơn một đơn vị hoạt động nguyên tử thành công hoặc thất bại.
Trong khi đó, để thực hiện một giao dịch thực thi thành công, chúng tôi cần đảm bảo rằng mỗi hoạt động riêng lẻ được hoàn thành và cam kết. Nếu đôi khi điều đó xảy ra rằng bất kỳ đơn vị hoạt động logic nào cũng thất bại, chúng ta cần biết rằng toàn bộ giao dịch cũng không thành công hoặc quay lại.
Chúng ta hãy thảo luận về một số thuộc tính của giao dịch trong MySQL, thường được gọi là Acid & NBSP; thuộc tính:
- Nguyên tử: Thuộc tính này đảm bảo rằng các truy vấn hoặc hoạt động SQL hình thành một đơn vị được cam kết thành công. Nhưng nếu nó không hiển thị bất kỳ lỗi nào thì giao dịch bị chấm dứt tại điểm thất bại và các hoạt động trước đó bị buộc trở lại trạng thái ban đầu của họ bởi rollback. This property ensures that the SQL queries or operations forming a single unit are committed successfully. But if it fails to show any error then, the transaction is terminated at the point of failure and the earlier operations are forced back to their original state by the rollback.
- Tính nhất quán: Nó xác định rằng bất kỳ thay đổi nào được thực hiện trong cơ sở dữ liệu thông qua giao dịch thành công sẽ thay đổi trạng thái của cơ sở dữ liệu. It determines that any changes made in the database through a successful transaction will change the states of the database.
- Sự cô lập: & NBSP; Tài sản này đảm bảo rằng các giao dịch được thực hiện là độc lập và minh bạch với nhau. This property assures that the transactions made are independent and transparent to each other.
- Độ bền: Nó cung cấp tính năng của sự tồn tại giao dịch của kết quả giao dịch đã cam kết hoàn thành ngay cả khi xảy ra lỗi hệ thống. It provides the feature of transaction persistence of a completed committed transaction result even if a system failure occurs.
Cú pháp của MySQL cam kết
Trong MySQL, chúng ta có thể tìm hiểu các báo cáo quan trọng dưới đây để quản lý các giao dịch:
Chúng ta cần sử dụng lệnh START CONTEAD & NBSP; để bắt đầu giao dịch. Bí danh của nó có thể là & nbsp; bắt đầu hoặc bắt đầu công việc.
Sau đó, & nbsp; lệnh cam kết được sử dụng để thực hiện hiệu ứng của các thay đổi trong bảng do giao dịch hiện tại.
Một lần nữa, hãy sử dụng câu lệnh & nbsp; rollback & nbsp; để quay lại các thay đổi được thực hiện và hủy bỏ cái đã cam kết.
Để thay đổi chế độ tự động thành lập, bạn có thể bật hoặc vô hiệu hóa trạng thái giao dịch hiện tại và sử dụng & nbsp; đặt AutoCommit.
Nhưng trong MySQL, cam kết sẽ tự động hiển thị các thay đổi trên bảng theo mặc định. Để tránh điều này trong cơ sở dữ liệu, bạn có thể đặt giới hạn của lệnh Auto Commit & NBSP;
autocommit
0
Or,
autocommit
1
Và sau đây để thực hiện rõ ràng tự động cam kết:
autocommit
2
Or,
autocommit
3
Làm thế nào để cam kết các tác phẩm trong MySQL?
Nói chung, một giao dịch bắt đầu với câu lệnh SQL bắt đầu và kết thúc bằng một câu lệnh SQL cam kết hoặc rollback. Giữa các Điều khoản bắt đầu và cuối này, các lệnh SQL được nhập thực hiện giao dịch.
Trong giao dịch MySQL, các từ khóa cam kết và rollback được sử dụng chủ yếu để nêu hành vi của các thay đổi trong bảng.
Lệnh cam kết giúp hiển thị hiệu ứng của một giao dịch thành công khi hoàn thành cho tất cả các bảng liên quan. Trong khi đó, lệnh rollback cho phép trả lại bảng liên quan đến giao dịch về trạng thái trước đó khi lỗi được thực hiện.
Do đó, chúng tôi cũng có thể kiểm soát trạng thái của một giao dịch bằng cách xác định biến phiên trong MySQL có tên AutoCommit. Ở đây, khi chúng tôi đặt AutoCommit thành 1, đây cũng là giá trị mặc định sau đó, nó chấp nhận từng câu lệnh SQL trong giao dịch hoặc không hoàn thành và được cam kết ở cuối.
Nhưng khi AutoCommit & nbsp; Giá trị là 0 do lệnh: Đặt AutoCommit = 0, loạt các câu lệnh SQL tiếp theo thực hiện như một giao dịch và trừ khi một tuyên bố cam kết rõ ràng được thực hiện, không có hoạt động nào trong giao dịch được thực hiện.
Ví dụ để thực hiện cam kết trong mysql
Để hiểu & nbsp; cam kết & nbsp; rõ ràng hơn, chúng ta hãy lấy ví dụ về việc chèn một giá trị dữ liệu hàng vào các bảng mẫu được tạo có tên ‘Khách hàng và‘ đơn đặt hàng.
Đây là bảng khách hàng:
Đây là bảng đơn đặt hàng:
Chúng tôi đang chứng minh để giải thích cam kết trong giao dịch MySQL bằng cách thêm các phần truy vấn SQL tạo thành một câu lệnh SQL và tìm hiểu khi nào các hàng cần phải được cam kết hoặc quay lại.
- Sau đây là mã tập lệnh để thực hiện giao dịch:
1. Bắt đầu một giao dịch MySQL mới
autocommit
4
2. Nhận số khách hàng mới nhất
autocommit
5
3. Chèn một hàng mới cho OrderNum 612
autocommit
6
4. Chèn các mục hàng đặt hàng
autocommit
7
5. Thay đổi cam kết sẽ được phản ánh trong bảng.
Output:
Ở đây, chúng tôi đã bắt đầu giao dịch của mình và tiếp theo đã chọn số khách hàng mới nhất tạo thành bảng đơn đặt hàng và áp dụng cho số tiếp theo là số khách hàng mới và chèn nó vào bảng. Ngoài ra, đã chèn số khách hàng vào bảng khách hàng và cuối cùng sử dụng tuyên bố cam kết đã cam kết giao dịch.
Tùy chọn, bạn có thể xem hàng các mục đặt hàng mới được chọn từ cả hai đơn đặt hàng & nbsp; và & nbsp; khách hàng.
- Để xem các hàng mới được tạo, chúng tôi sẽ sử dụng truy vấn SQL dưới đây:
autocommit
8
Output:
Nếu chúng ta xem cá nhân cả hai bảng, chúng ta có thể thấy các thay đổi sau trong các bảng:
Bảng khách hàng:
Bảng đơn đặt hàng:
- Để sử dụng giao dịch & nbsp; quy trình trong & nbsp; mysql, các bảng nên được hình thành theo một cách đặc biệt. Bảng phổ biến nhất hỗ trợ các hoạt động giao dịch là & nbsp; innodb.
- Chúng ta cần có phiên bản MySQL nên có tính năng biên dịch cụ thể.
- Về cơ bản, khi một giao dịch được thực hiện bằng cách sử dụng cam kết, thì các sửa đổi được lưu vĩnh viễn. Bạn có thể sử dụng lệnh rollback để hủy tất cả các thay đổi giao dịch và quay lại trạng thái trước khi cam kết được thực thi trong bảng.
- Nhưng tuy nhiên, trong MySQL, không có rollback vì ở đây chế độ AutoCimMitt được bật. Do đó, trong MySQL, gần như tất cả các tuyên bố không thể được hoàn nguyên.
- Chúng tôi cần phải sao lưu cơ sở dữ liệu để khôi phục giao dịch đã cam kết và cũng có thể sử dụng các công cụ DBA để phát lại tất cả các sửa đổi dữ liệu từ nhật ký hoặc có thể bỏ qua sự cố.
Sự kết luận
Về mặt logic, trong khi viết câu lệnh SQL cho & nbsp; cam kết & nbsp; để thực hiện giao dịch, thì chúng tôi sẽ kết hợp nhiều truy vấn SQL với một nhóm và thực hiện tất cả chúng lại với nhau như một giao dịch.
Khi bất kỳ giao dịch nào được hoàn thành thành công trong bảng, giả sử để chèn một đơn đặt hàng hoặc hồ sơ kiểm kê sau đó, lệnh & nbsp; cam kết & nbsp; được sử dụng để cảnh báo các thay đổi diễn ra trong các bảng liên quan trong giao dịch.
Bài viết đề xuất
Đây là một hướng dẫn cho MySQL cam kết. Ở đây chúng tôi thảo luận về các ví dụ để thực hiện cam kết trong MySQL cùng với bảng khách hàng, bảng đặt hàng và mã tập lệnh. Bạn cũng có thể xem các bài viết sau để tìm hiểu thêm -
- Mysql tham gia bên ngoài
- Tham gia tự nhiên SQL
- Cài đặt PostgreSQL
- Min [] trong mysql