Hướng dẫn how do i create a transaction in mysql? - làm cách nào để tạo giao dịch trong mysql?

13.3.1 & nbsp; bắt đầu các câu lệnh giao dịch, cam kết và rollback

START TRANSACTION
    [transaction_characteristic [, transaction_characteristic] ...]

transaction_characteristic: {
    WITH CONSISTENT SNAPSHOT
  | READ WRITE
  | READ ONLY
}

BEGIN [WORK]
COMMIT [WORK] [AND [NO] CHAIN] [[NO] RELEASE]
ROLLBACK [WORK] [AND [NO] CHAIN] [[NO] RELEASE]
SET autocommit = {0 | 1}

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:

  • START TRANSACTION hoặc BEGIN Bắt đầu một giao dịch mới.

  • COMMIT thực hiện giao dịch hiện tại, làm cho các thay đổi của nó vĩnh viễn.

  • ROLLBACK quay lại giao dịch hiện tại, hủy bỏ các thay đổi của nó.

  • SET autocommit vô hiệu hóa hoặc cho phép chế độ AutoCommit mặc định cho phiên hiện tại.

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 START TRANSACTIONCOMMIT. Bạn không thể sử dụng ROLLBACK để 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 START TRANSACTION:

START TRANSACTION;
SELECT @A:=SUM(salary) FROM table1 WHERE type=1;
UPDATE table2 SET summary=@A WHERE type=1;
COMMIT;

Với START TRANSACTION, AutoCommit vẫn bị vô hiệu hóa cho đến khi bạn kết thúc giao dịch với COMMIT hoặc ROLLBACK. Chế độ AutoCommit sau đó trở lại trạng thái trước đó.

START TRANSACTION 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.

  • Công cụ sửa đổi

    START TRANSACTION;
    SELECT @A:=SUM(salary) FROM table1 WHERE type=1;
    UPDATE table2 SET summary=@A WHERE type=1;
    COMMIT;
    6 bắt đầu một lần đọc nhất quán cho các công cụ lưu trữ có khả năng của nó. Điều này chỉ áp dụng cho
    START TRANSACTION;
    SELECT @A:=SUM(salary) FROM table1 WHERE type=1;
    UPDATE table2 SET summary=@A WHERE type=1;
    COMMIT;
    7. Hiệu ứng này giống như phát hành START TRANSACTION, sau đó là
    START TRANSACTION;
    SELECT @A:=SUM(salary) FROM table1 WHERE type=1;
    UPDATE table2 SET summary=@A WHERE type=1;
    COMMIT;
    9 từ bất kỳ bảng
    START TRANSACTION;
    SELECT @A:=SUM(salary) FROM table1 WHERE type=1;
    UPDATE table2 SET summary=@A WHERE type=1;
    COMMIT;
    7 nào. Xem Phần & NBSP; 15.7.2.3, không khóa nhất định đọc. Công cụ sửa đổi
    SET autocommit=0;
    1 không thay đổi mức cách ly giao dịch hiện tại, do đó, nó chỉ cung cấp một ảnh chụp nhanh nhất quán nếu mức cách ly hiện tại là một cấp độ cho phép đọc nhất quán. Mức cách cô lập duy nhất cho phép đọc nhất quán là
    SET autocommit=0;
    2. Đối với tất cả các cấp độ cô lập khác, mệnh đề
    SET autocommit=0;
    3 bị bỏ qua. Một cảnh báo được tạo ra khi mệnh đề
    START TRANSACTION;
    SELECT @A:=SUM(salary) FROM table1 WHERE type=1;
    UPDATE table2 SET summary=@A WHERE type=1;
    COMMIT;
    6 bị bỏ qua.

  • Bộ điều chỉnh

    SET autocommit=0;
    5 và
    SET autocommit=0;
    6 đặt chế độ truy cập giao dịch. Họ cho phép hoặc cấm thay đổi các bảng được sử dụng trong giao dịch. Hạn chế
    SET autocommit=0;
    7 ngăn giao dịch sửa đổi hoặc khóa cả bảng giao dịch và không chuyển giao có thể hiển thị cho các giao dịch khác; Giao dịch vẫn có thể sửa đổi hoặc khóa các bảng tạm thời.

    MySQL cho phép tối ưu hóa thêm cho các truy vấn trên bảng

    START TRANSACTION;
    SELECT @A:=SUM(salary) FROM table1 WHERE type=1;
    UPDATE table2 SET summary=@A WHERE type=1;
    COMMIT;
    7 khi giao dịch được biết là chỉ đọc. Chỉ định
    SET autocommit=0;
    7 đảm bảo các tối ưu hóa này được áp dụng trong trường hợp trạng thái chỉ đọc không thể được xác định tự động. Xem Phần & NBSP; 8.5.3, Tối ưu hóa các giao dịch chỉ đọc của InnoDB để biết thêm thông tin.

    Nếu không có chế độ truy cập được chỉ định, chế độ mặc định áp dụng. Trừ khi mặc định đã được thay đổi, nó được đọc/ghi. Nó không được phép chỉ định cả

    SET autocommit=0;
    5 và
    SET autocommit=0;
    7 trong cùng một tuyên bố.

    Trong chế độ chỉ đọc, vẫn có thể thay đổi các bảng được tạo bằng từ khóa START TRANSACTION2 bằng cách sử dụng các câu lệnh DML. Những thay đổi được thực hiện với các câu lệnh DDL không được phép, giống như với các bảng vĩnh viễn.

    Để biết thêm thông tin về chế độ truy cập giao dịch, bao gồm các cách để thay đổi chế độ mặc định, hãy xem Phần & NBSP; 13.3.7, Câu lệnh giao dịch Set Set.

    Nếu biến hệ thống START TRANSACTION3 được bật, hãy bắt đầu rõ ràng một giao dịch với START TRANSACTION4 yêu cầu đặc quyền START TRANSACTION5 (hoặc đặc quyền START TRANSACTION6 không dùng nữa).

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 START TRANSACTION 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:

SET autocommit=0;

Sau khi vô hiệu hóa chế độ AutoCommit bằng cách đặt biến START TRANSACTION8 thành 0, các thay đổi đối với các bảng an toàn giao dịch (chẳng hạn như cho các bảng cho

START TRANSACTION;
SELECT @A:=SUM(salary) FROM table1 WHERE type=1;
UPDATE table2 SET summary=@A WHERE type=1;
COMMIT;
7 hoặc BEGIN0) không được thực hiện vĩnh viễn ngay lập tức. Bạn phải sử dụng COMMIT để lưu trữ các thay đổi của mình vào đĩa hoặc ROLLBACK để bỏ qua các thay đổi.

START TRANSACTION8 là một biến phiên và phải được đặt cho mỗi phiên. Để vô hiệu hóa chế độ AutoCommit cho mỗi kết nối mới, hãy xem mô tả của biến hệ thống START TRANSACTION8 tại Phần & NBSP; 5.1.8, các biến hệ thống máy chủ của Hồi giáo.

BEGINBEGIN6 được hỗ trợ dưới dạng bí danh của START TRANSACTION để bắt đầu giao dịch. START TRANSACTION 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à BEGIN không có.

Tuyên bố BEGIN khác với việc sử dụng từ khóa BEGIN bắt đầu một câu lệnh ghép COMMIT2. 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 COMMIT3 là khởi đầu của khối COMMIT4. Thay vào đó, hãy bắt đầu một giao dịch trong bối cảnh này với COMMIT5.

Từ khóa COMMIT6 tùy chọn được hỗ trợ cho COMMITROLLBACK, cũng như các điều khoản COMMIT9 và ROLLBACK0. COMMIT9 và ROLLBACK0 có thể được sử dụng để kiểm soát bổ sung đối với việc hoàn thành giao dịch. Giá trị của biến hệ thống ROLLBACK3 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 ROLLBACK4 khiến một giao dịch mới bắt đầu ngay khi giao dịch hiện tại kết thúc và giao dịch mới có cùng mức cách ly như giao dịch được chấm dứt. Giao dịch mới cũng sử dụng cùng một chế độ truy cập (ROLLBACK5 hoặc

SET autocommit=0;
7) làm giao dịch được chấm dứt. Điều khoản ROLLBACK0 khiến máy chủ ngắt kết nối phiên máy khách hiện tại sau khi chấm dứt giao dịch hiện tại. Bao gồm từ khóa ROLLBACK8 triệt tiêu hoàn thành COMMIT9 hoặc ROLLBACK0, có thể hữu ích nếu biến hệ thống ROLLBACK3 được đặt để gây ra chuỗi hoặc giải phóng hoàn thành theo mặc định.

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 SET autocommit2 được phát hành, như thể bạn đã thực thi SET autocommit3. 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 SET autocommit4.

Để 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:

  • Nếu bạn sử dụng các bảng từ nhiều hơn một công cụ lưu trữ an toàn giao dịch (chẳng hạn như

    START TRANSACTION;
    SELECT @A:=SUM(salary) FROM table1 WHERE type=1;
    UPDATE table2 SET summary=@A WHERE type=1;
    COMMIT;
    7) và mức cách ly giao dịch không phải là SET autocommit6, có thể khi một giao dịch thực hiện, một giao dịch đang diễn ra khác sử dụng cùng một bảng những thay đổi được thực hiện bởi giao dịch đầu tiên. Đó là, tính nguyên tử của các giao dịch không được đảm bảo với các động cơ hỗn hợp và sự không nhất quán có thể dẫn đến. .

  • Nếu bạn sử dụng các bảng không an toàn giao dịch trong giao dịch, các thay đổi cho các bảng đó được lưu trữ cùng một lúc, bất kể trạng thái của chế độ AutoCommit.

  • Nếu bạn đưa ra tuyên bố ROLLBACK sau khi cập nhật bảng không chuyển hóa trong giao dịch, thì cảnh báo START TRANSACTION0 sẽ xảy ra. Các thay đổi đối với các bảng an toàn giao dịch được quay lại, nhưng không thay đổi đối với các bảng không an toàn.

Mỗi giao dịch được lưu trữ trong nhật ký nhị phân trong một đoạn, vào COMMIT. 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 ROLLBACK 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 START TRANSACTION3. 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 đó, START TRANSACTION4 hiển thị START TRANSACTION5 trong cột START TRANSACTION6 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 ROLLBACK mà còn cho các cuộc chạy lại ngầm.

Khi

START TRANSACTION;
SELECT @A:=SUM(salary) FROM table1 WHERE type=1;
UPDATE table2 SET summary=@A WHERE type=1;
COMMIT;
7 thực hiện một cuộc quay đầu hoàn chỉnh của một giao dịch, tất cả các khóa được đặt bởi giao dịch được phát hành. Nếu một câu lệnh SQL duy nhất trong giao dịch quay lại do lỗi, chẳng hạn như lỗi khóa trùng lặp, khóa được đặt bởi câu lệnh được bảo tồn trong khi giao dịch vẫn hoạt động. Điều này xảy ra bởi vì
START TRANSACTION;
SELECT @A:=SUM(salary) FROM table1 WHERE type=1;
UPDATE table2 SET summary=@A WHERE type=1;
COMMIT;
7 lưu trữ khóa hàng ở định dạng sao cho không thể biết sau đó khóa nào được đặt bởi câu lệnh nào.

Nếu câu lệnh

START TRANSACTION;
SELECT @A:=SUM(salary) FROM table1 WHERE type=1;
UPDATE table2 SET summary=@A WHERE type=1;
COMMIT;
9 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 ROLLBACK được thực thi cho giao dịch sau đó, toàn bộ giao dịch sẽ quay lại.

Làm cách nào để bắt đầu một giao dịch trong mysql?

Bắt đầu giao dịch bằng cách phát hành lệnh SQL bắt đầu công việc. Phát hành một hoặc nhiều lệnh SQL như chọn, chèn, cập nhật hoặc xóa. Kiểm tra xem không có lỗi và mọi thứ là theo yêu cầu của bạn. Nếu có bất kỳ lỗi nào, thì hãy đưa ra lệnh rollback, nếu không sẽ đưa ra lệnh cam kết.issuing the SQL command BEGIN WORK. Issue one or more SQL commands like SELECT, INSERT, UPDATE or DELETE. Check if there is no error and everything is according to your requirement. If there is any error, then issue a ROLLBACK command, otherwise issue a COMMIT command.

Giao dịch trong MySQL với ví dụ là gì?

Một giao dịch trong MySQL là một nhóm tuần tự gồm các câu lệnh, truy vấn hoặc hoạt động như chọn, chèn, cập nhật hoặc xóa để thực hiện như một đơn vị làm việc duy nhất có thể được thực hiện hoặc quay lại.

Giao dịch MySQL hoạt động như thế nào?

Trong MySQL, các giao dịch bắt đầu bằng câu lệnh bắt đầu công việc và kết thúc bằng một tuyên bố cam kết hoặc rollback.Các lệnh SQL giữa các câu lệnh bắt đầu và kết thúc tạo thành phần lớn của giao dịch.

Đặt giao dịch trong MySQL là gì?

Câu lệnh giao dịch đã đặt trong MySQL được sử dụng để đặt các giá trị thành các đặc điểm của giao dịch hiện tại như mức cách ly giao dịch và chế độ truy cập.used to set the values to the characteristics of the current transaction such as transaction isolation level and access mode.