Transaction (giao dịch) là một nhóm, có thứ tự, các hoạt động thao tác trên cơ sở dữ liệu, nhưng được xem như một đơn vị thao tác duy nhất.
Vì thế, một transaction sẽ không được xem là thành công khi chỉ cần một thao tác đơn nào đó trong nó không hoàn thành. Trong trường hợp này, transaction được xem là thất bại (giao dịch không thành công).
Trong thực tế người ta thường gộp nhiều câu lệnh SQL vào một nhóm (group) và rồi thực hiện tất cả chúng với nhau như là một phần của một transaction.
Các thuộc tính của transaction:
Transaction có 4 thuộc tính chuẩn sau đây (thường gọi là chuẩn ACID):
Trong MySQL, transaction bắt đầu với câu lệnh BEGIN WORK và kết thúc với một trong hai câu lệnh COMMIT hoặc ROLLBACK. Các câu lệnh SQL đặt giữa [BEGIN WORK … COMMIT/ROLLBACK] là phần chính của một transaction.
Lệnh COMMIT và Lệnh ROLLBACK:
Đây là hai keyword được sử dụng chính trong các transaction MySQL.
- Khi một transaction hoàn chỉnh được hoàn thành thì lệnh COMMIT phải được đưa ra để mọi sự thay đổi đều được tác động đến tất cả các table liêu quan.
- Nếu bị lỗi, thì lệnh ROLLBACK nên được đưa ra để đưa tất cả các table liên quan với transaction về lại trạng thái trước đó.
Ta có thể điều khiển hành vi của một transaction bằng cách thiết lập một biến phiên, được gọi là Autocommit. Nếu Autocommit được thiết lập bằng 1, SET AUTOCOMMIT = 1 (default), thì mỗi lệnh SQL (trong hoặc ngoài transaction) được xem như một transaction hoàn chỉnh, điều này được duy trì cho đến khi nó kết thúc. Khi Autocommit được thiết lập bằng 0, SET AUTOCOMMIT = 0, thì một tập, có thứ tự, của các câu lệnh sẽ đóng vai trò như là một transaction và không có một hoạt động nào là được xuất phát cho đến có một lệnh Commit khác được đưa ra.
Ta có thể sử dụng các câu lệnh này trong PHP bằng cách sử dụng hàm mysql_query().
Một số lưu ý khi xây dựng và sử dụng transaction:
Sự tuần tự của các lệnh trong một transaction là hoàn toàn độc lập với ngôn ngữ lập trình, vì thế, một tuần tự logic có thể được tạo ra trong ngôn ngữ mà ta đang sử dụng để tạo ra các ứng dụng như mong muốn.
Ta có thể sử dụng các câu lệnh trên trong PHP bằng cách sử dụng hàm mysql_query():
Các loại table bảo vệ transaction (tansaction-safe table) trong MySQL:
Ta không thể sử dụng transaction một cách trực tiếp mà phải sử dụng trong chương trình MySQL. Trong trường hợp này, ta cần phải tạo ra các table theo cách đặc biệt. Có nhiều loại table hỗ trợ điều này, thông dụng nhất là InnoDB.
Nếu MySQL của chúng ta có cài đặt hỗ trợ các table InnoDB thì ta chỉ cần thêm định nghĩa Type = InnoDB vào câu lệnh Create table là được.
Ví dụ:
root@ubuntu#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)
mysql>
Ta cũng có thể sử dụng loại table khác như GEMNI hoặc BDB, phụ thuộc vào việc hệ thống của ta có cài đặt sự hõ trợ của hai loại này hay không.
(Nguyễn Kim Tuấn - K.CNTT)
» Tin mới nhất:
» Các tin khác: