Hướng dẫn is commit necessary in mysql? - Cam kết có cần thiết trong mysql không?

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ả COMMITROLLBACK đều 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ịch

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 InnoDB1 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 InnoDB4 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ư InnoDB8 hoặc InnoDB9. 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.

Hướng dẫn is commit necessary in mysql? - Cam kết có cần thiết trong mysql không?

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;

autocommit0

Or,

autocommit1

Và sau đây để thực hiện rõ ràng tự động cam kết:

autocommit2

Or,

autocommit3

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:

Hướng dẫn is commit necessary in mysql? - Cam kết có cần thiết trong mysql không?

Đây là bảng đơn đặt hàng:

Hướng dẫn is commit necessary in mysql? - Cam kết có cần thiết trong mysql khô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

autocommit4

2. Nhận số khách hàng mới nhất

autocommit5

3. Chèn một hàng mới cho OrderNum 612

autocommit6

4. Chèn các mục hàng đặt hàng

autocommit7

5. Thay đổi cam kết sẽ được phản ánh trong bảng.

Output:

Hướng dẫn is commit necessary in mysql? - Cam kết có cần thiết trong mysql không?

Ở đâ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:

autocommit8

Output:

Hướng dẫn is commit necessary in mysql? - Cam kết có cần thiết trong mysql không?

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:

Hướng dẫn is commit necessary in mysql? - Cam kết có cần thiết trong mysql không?

Bảng đơn đặt hàng:

Hướng dẫn is commit necessary in mysql? - Cam kết có cần thiết trong mysql khô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 -

  1. Mysql tham gia bên ngoài
  2. Tham gia tự nhiên SQL
  3. Cài đặt PostgreSQL
  4. Min () trong mysql

Cam kết có được yêu cầu trong MySQL không?

Một tuyên bố cam kết 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 bị vô hiệu hóa AutoCommit 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 đó.. If a session that has autocommit disabled ends without explicitly committing the final transaction, MySQL rolls back that transaction.

Có cần thiết phải sử dụng cam kết trong SQL không?

Một lệnh cam kết trong SQL là một lệnh thiết yếu được sử dụng sau các hoạt động ngôn ngữ thao tác dữ liệu (DML) như chèn, xóa và cập nhật các giao dịch.Giao dịch trong SQL là một tập hợp các câu lệnh SQL.Khi bạn thực hiện thao tác DML mà không có tuyên bố cam kết, các thay đổi chỉ hiển thị cho bạn. that is used after Data Manipulation Language (DML) operations like INSERT, DELETE and UPDATE transactions. Transactions in SQL are a set of SQL statements. When you perform a DML operation without a COMMIT statement, the changes are visible only to you.

Điều gì xảy ra nếu bạn không cam kết trong SQL?

SQL Server sẽ ghi lại tất cả các thay đổi đối với nhật ký giao dịch và một khi bạn cam kết, chúng được làm cứng vào tệp dữ liệu.Nếu bạn không cam kết, thì giao dịch của bạn sẽ vẫn mở vô thời hạn - điều mà bạn có thể thấy trong SYS.your transaction will remain OPEN indefinitely - which you can see in sys.

Cam kết có cần thiết sau khi chèn không?

Bạn có thể không muốn cam kết sau mỗi lần chèn, nhưng có lẽ bạn muốn cam kết sau mỗi lần chèn / *+ phụ lục * /.Để chèn thông thường, có lẽ bạn chỉ muốn cam kết khi giao dịch logic của ứng dụng hoàn tất. . For a conventional INSERT , you probably only want to commit when the application's logical transaction is complete.