MySQL - Giao dịch

Một giao dịch là một nhóm tuần tự các thao tác thao tác cơ sở dữ liệu, được thực hiện như thể nó là một đơn vị công việc duy nhất. Nói cách khác, một giao dịch sẽ không bao giờ hoàn tất trừ khi từng hoạt động riêng lẻ trong nhóm thành công. Nếu bất kỳ thao tác nào trong giao dịch không thành công, toàn bộ giao dịch sẽ thất bại.

Thực tế, bạn sẽ kết hợp nhiều truy vấn SQL thành một nhóm và bạn sẽ thực hiện tất cả chúng cùng nhau như một phần của giao dịch.

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

Giao dịch có bốn thuộc tính tiêu chuẩn sau, thường được gọi bằng từ viết tắt ACID -

  • Atomicity- Điều này đảm bảo rằng tất cả các hoạt động trong đơn vị công việc được hoàn thành tốt đẹp; nếu không, giao dịch sẽ bị hủy bỏ tại điểm không thành công và các hoạt động trước đó được khôi phục lại trạng thái cũ của chúng.

  • Consistency - Điều này đảm bảo rằng cơ sở dữ liệu thay đổi đúng các trạng thái khi giao dịch được cam kết thành công.

  • Isolation - Điều này cho phép các giao dịch hoạt động độc lập và minh bạch với nhau.

  • Durability - Điều này đảm bảo rằng kết quả hoặc hiệu lực của một giao dịch đã cam kết vẫn tồn tại trong trường hợp hệ thống bị lỗi.

Trong MySQL, các giao dịch bắt đầu bằng câu lệnh BEGIN WORK và kết thúc bằng một COMMIT hoặc một ROLLBACKtuyên bố. Các lệnh SQL giữa 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.

CAM KẾT và ROLLBACK

Hai từ khóa này CommitRollback chủ yếu được sử dụng cho các Giao dịch MySQL.

  • Khi một giao dịch thành công hoàn tất, lệnh COMMIT sẽ được phát hành để các thay đổi đối với tất cả các bảng liên quan có hiệu lực.

  • Nếu xảy ra lỗi, lệnh ROLLBACK sẽ được đưa ra để đưa mọi bảng được tham chiếu trong giao dịch về trạng thái trước đó của nó.

Bạn có thể kiểm soát hành vi của một giao dịch bằng cách đặt biến phiên được gọi là AUTOCOMMIT. Nếu AUTOCOMMIT được đặt thành 1 (mặc định), thì mỗi câu lệnh SQL (trong một giao dịch hoặc không) được coi là một giao dịch hoàn chỉnh và được cam kết theo mặc định khi nó kết thúc.

Khi AUTOCOMMIT được đặt thành 0, bằng cách phát hành SET AUTOCOMMIT = 0 lệnh, loạt câu lệnh tiếp theo hoạt động giống như một giao dịch và không có hoạt động nào được thực hiện cho đến khi một câu lệnh COMMIT rõ ràng được đưa ra.

Bạn có thể thực thi các lệnh SQL này trong PHP bằng cách sử dụng mysql_query() chức năng.

Một ví dụ chung về giao dịch

Chuỗi sự kiện này độc lập với ngôn ngữ lập trình được sử dụng. Đường dẫn logic có thể được tạo bằng bất kỳ ngôn ngữ nào bạn sử dụng để tạo ứng dụng của mình.

Bạn có thể thực thi các lệnh SQL này trong PHP bằng cách sử dụng mysql_query() chức năng.

  • Bắt đầu giao dịch bằng cách đưa ra lệnh SQL BEGIN WORK.

  • Đưa ra một hoặc nhiều lệnh SQL như SELECT, INSERT, UPDATE hoặc DELETE.

  • Kiểm tra nếu không có lỗi và mọi thứ theo yêu cầu của bạn.

  • Nếu có bất kỳ lỗi nào, hãy đưa ra lệnh ROLLBACK, nếu không, hãy đưa ra lệnh COMMIT.

Các loại bảng an toàn giao dịch trong MySQL

Bạn không thể sử dụng các giao dịch trực tiếp, nhưng đối với một số trường hợp ngoại lệ, bạn có thể. Tuy nhiên, chúng không an toàn và đảm bảo. Nếu bạn định sử dụng các giao dịch trong lập trình MySQL của mình, thì bạn cần tạo các bảng của mình theo một cách đặc biệt. Có nhiều loại bảng hỗ trợ giao dịch, nhưng loại phổ biến nhất làInnoDB.

Hỗ trợ cho bảng InnoDB yêu cầu một tham số biên dịch cụ thể khi biên dịch MySQL từ nguồn. Nếu phiên bản MySQL của bạn không có hỗ trợ InnoDB, hãy yêu cầu Nhà cung cấp dịch vụ Internet của bạn xây dựng phiên bản MySQL có hỗ trợ các loại bảng InnoDB hoặc tải xuống và cài đặtMySQL-Max Binary Distribution cho Windows hoặc Linux / UNIX và làm việc với loại bảng trong môi trường phát triển.

Nếu cài đặt MySQL của bạn hỗ trợ bảng InnoDB, chỉ cần thêm TYPE = InnoDB định nghĩa cho câu lệnh tạo bảng.

Ví dụ: đoạn mã sau tạo một bảng InnoDB được gọi là tcount_tbl -

root@host# mysql -u root -p password;
Enter password:*******

mysql> use TUTORIALS;
Database changed

mysql> create table tcount_tbl
   -> (
   -> tutorial_author varchar(40) NOT NULL,
   -> tutorial_count  INT
   -> ) TYPE = InnoDB;
Query OK, 0 rows affected (0.05 sec)

Để biết thêm chi tiết về InnoDB, bạn có thể nhấp vào liên kết sau - InnoDB

Bạn có thể sử dụng các loại bảng khác như GEMINI hoặc là BDB, nhưng nó phụ thuộc vào cài đặt của bạn, nó có hỗ trợ hai loại bảng này hay không.