MySQLi - 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- đả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 thành công; 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 - đả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 - cho phép các giao dịch hoạt động độc lập và minh bạch với nhau.
Durability - đả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 câu lệnh COMMIT hoặc ROLLBACK. Các lệnh SQLi 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.
CAM KẾT và ROLLBACK
Hai từ khóa này Commit và Rollback 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 đưa ra lệnh SET AUTOCOMMIT = 0, chuỗi các câu lệnh tiếp theo sẽ 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 mysqli_query() chức năng.
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 mysqli_query() chức năng.
Bắt đầu giao dịch bằng cách 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 sử dụng lệnh ROLLBACK, nếu không, hãy sử dụng lệnh COMMIT.
Các loại bảng an toàn giao dịch trong MySQLi
Bạn không thể sử dụng các giao dịch trực tiếp, bạn có thể nhưng chúng sẽ 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 MySQLi 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 phổ biến nhất làInnoDB.
Hỗ trợ các bảng InnoDB yêu cầu một tham số biên dịch cụ thể khi biên dịch MySQLi từ nguồn. Nếu phiên bản MySQLi 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 MySQLi có hỗ trợ các loại bảng InnoDB hoặc tải xuống và cài đặt bản phân phối nhị phân MySQL-Max cho Windows hoặc Linux / UNIX và làm việc với loại bảng trong một môi trường phát triển.
Nếu cài đặt MySQLi 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ó tên là tutorial_innodb -
root@host# mysql -u root -p;
Enter password:*******
mysql> use TUTORIALS;
Database changed
mysql> create table tutorials_innodb
-> (
-> tutorial_author varchar(40) NOT NULL,
-> tutorial_count INT
-> ) TYPE = InnoDB;
Query OK, 0 rows affected (0.02 sec)
Kiểm tra liên kết sau để biết thêm về - 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ếu nó hỗ trợ hai loại này.