Loading...

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):

  • Atomicity (tính tự trị): Đảm bảo rằng tất cả các hoạt động trong phạm vi một đơn vị làm việc là thành công hoàn toàn. Ngược lại, transaction sẽ bị hủy ngay tại điểm lỗi. Và các các họat động trước sẽ được quay lại đúng trạng thái trước đó của nó.
  • Consistency (tính nhất quán): Đảm bảo cơ sở dữ liệu thay đổi đúng trạng thái khi khi transaction kết thúc thành công.
  • Isolation (tính độc lập): Cho phép transaction hoạt động một cách độc lập và “trong suốt” (transparent) với các transaction khác.
  • Durability (tính bền vững): Đảm bảo kết quả hoặc tác động của transaction vẫn luôn tồn tại kể cả khi hệ thống bị lỗi.

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.

  • Phải dùng lệnh BEGIN WORK để bắt đầu một transaction.
  • Có thể đưa ra một hoặc nhiều các câu lệnh sau trong một transaction: SELECT, INSERT, UPDATE hoặc DELETE.
  • Trước khi thực hiện phải kiểm tra để dảm bảo không còn lỗi nào và mọi thứ phải theo đúng yêu cầu đã đặt ra.
  • Nếu thấy có bất kỳ lỗi nào thì phải đưa ra câu lệnh ROLLBACK, ngược lại phải đưa ra câu lệnh COMMIT.

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.

Tự học

Ý kiến của bạn

Mã bảo vệ
Làm mới

Hãy đăng quảng cáo trên TuHocAnNinhMang.com

Bài xem nhiều nhất

Tự học lập trình C - Bài 1: Một số khái niệm cơ bản

Khái niệm tên rất quan trọng trong quá trình lập trình, ...

MySQL – Bài 8: Khóa chính (primary key) và khóa ngoại (foreign key) của table

Với ràng buộc này thì, việc người sử dụng vô tình hay cố ...

Tự học lập trình C - Bài 10: Mảng một chiều

Mảng 1 chiều là tập hợp các phần tử có cùng kiểu dữ ...

Tự học lập trình JAVA – Bài 1: Bước đầu với Java

Một chương trình java có thể được định nghĩa như là một ...

Tự học lập trình C - Bài 2: Cấu trúc chương trình C

Một chương trình bao gồm một hoặc nhiều hàm, mỗi hàm ...

Tự học lập trình Assembly - Bài 1: Bước đầu với lập trình Assembly trên vi xử lý Intel 8086/8088

Như đã biết, lệnh ngôn ngữ máy là một dãy các con số 0, ...

Hướng dẫn in ấn trong Word 2007/2010 – Step by Step

[Tự học] - Tiêu đề đầu trang (Header)/tiêu đề cuối ...

Hãy đăng quảng cáo trên TuHocAnNinhMang.com

Về đầu trang Hỏi - Đáp