Tới nội dung chính
Danh mục
Hệ quản trị SQL

Transaction trong SQL Server

Khi học về SQL chắc chắn các bạn sẽ được tìm hiểu về transaction SQL. Đây là một nhóm câu lệnh trong SQL rất thường xuyên được sử dụng. Vậy cụ thể, cách dùng transaction trong SQL như thế nào? Hãy cùng theo dõi ngay sau đây!

1. Các thuộc tính của Transaction

– Tính bảo toàn (Atomicity): “All or nothing”, đây là thuộc tính đảm bảo sẽ thực thi thành công toàn bộ câu lệnh trong nhóm lệnh đó. Nếu không, tại thời điểm thất bại transaction sẽ bị hủy bỏ, đồng thời khôi phục lại những thao tác trước đó về trạng thái cũ. Nghĩa là sẽ không xuất hiện bất kỳ thay đổi dữ liệu nào

– Tính nhất quán (Consistency): Đảm bảo nếu SQL transaction được thực thi thành công thì các dữ liệu sẽ thay đổi chính xác trạng thái

– Tính độc lập (Isolation): Trong SQL server transaction sẽ được hoạt động một cách độc lập với nhau

– Tính bền vững (Durability): Đảm bảo rằng kết quả của 1 transaction được xác định và không xuất hiện tình trạng dữ liệu của transaction chuyển lại trạng thái trước đó sau khi thực thi thành công

2. Các lệnh xử lý trong Transaction

Trong transaction SQL server có các lệnh xử lý:

  • COMMIT trong SQL:
  • ROLLBACK trong SQL
  • SAVEPOINT trong SQL
  • RELEASE SAVEPOINT trong SQL

2.1 Lệnh COMMIT trong SQL

COMMIT có tác dụng lưu lại những thay đổi được gọi bởi 1 transaction với CSDL tính từ lệnh COMMIT hoặc ROLLBACK cuối cùng.

Cú pháp:

COMMIT;

Ví dụ: Nếu chúng ta có 1 bảng CUSTOMERS như sau:

Chúng ta sẽ xóa các bản ghi từ bảng có age giá trị 25 rồi thực hiện lệnh COMMIT:

1

2

3

4

5

6

7

8

9

10

11

+—-+———-+—–+———–+———-+

| ID | NAME | AGE | ADDRESS | SALARY |

+—-+———-+—–+———–+———-+

| 1 | Ha Anh | 32 | Da Nang | 2000.00 |

| 2 | Van Ha | 25 | Ha Noi | 1500.00 |

| 3 | Vu Bang | 23 | Vinh | 2000.00 |

| 4 | Thu Minh | 25 | Ha Noi | 6500.00 |

| 5 | Hai An | 27 | Ha Noi | 8500.00 |

| 6 | Hoang | 22 | Ha Noi | 4500.00 |

| 7 | Binh | 24 | Ha Noi | 10000.00 |

+—-+———-+—–+———–+———-+

Kết quả sau khi thực hiện câu lệnh SELECT là:

1

2

3

DELETE FROM CUSTOMERS

WHERE AGE = 25;

COMMIT;

2.2 Lệnh ROLLBACK trong SQL

Lệnh ROLLBACK transaction SQL có tác dụng hoàn tác các transaction chưa được lưu vào CSDL kể từ khi lệnh COMMIT hoặc ROLLBACK cuối cùng được phát hành.

Cú pháp:

ROLLBACK;

Ví dụ: Trong bảng CUSTOMERS có:

1

2

3

4

5

6

7

8

9

+—-+———-+—–+———–+———-+

| ID | NAME | AGE | ADDRESS | SALARY |

+—-+———-+—–+———–+———-+

| 1 | Ha Anh | 32 | Da Nang | 2000.00 |

| 3 | Vu Bang | 23 | Vinh | 2000.00 |

| 5 | Hai An | 27 | Ha Noi | 8500.00 |

| 6 | Hoang | 22 | Ha Noi | 4500.00 |

| 7 | Binh | 24 | Ha Noi | 10000.00 |

+—-+———-+—–+———–+———-+

Chúng ta thực hiện xóa các bản ghi có age giá trị 25 và Xóa các thay đổi trong CSDL:

1

2

3

4

5

6

7

8

9

10

11

+—-+———-+—–+———–+———-+

| ID | NAME | AGE | ADDRESS | SALARY |

+—-+———-+—–+———–+———-+

| 1 | Ha Anh | 32 | Da Nang | 2000.00 |

| 2 | Van Ha | 25 | Ha Noi | 1500.00 |

| 3 | Vu Bang | 23 | Vinh | 2000.00 |

| 4 | Thu Minh | 25 | Ha Noi | 6500.00 |

| 5 | Hai An | 27 | Ha Noi | 8500.00 |

| 6 | Hoang | 22 | Ha Noi | 4500.00 |

| 7 | Binh | 24 | Ha Noi | 10000.00 |

+—-+———-+—–+———–+———-+

Thực hiện xóa không gây ra ảnh hưởng tới bảng. Khi thực hiện tiếp câu lệnh SELECT sẽ cho kết quả như sau:

1

2

3

DELETE FROM CUSTOMERS

WHERE AGE = 25;

ROLLBACK;

2.3 Lệnh SAVEPOINT trong SQL

Trong transaction, SAVEPOINT là 1 điểm cho phép lùi transaction quay lại điểm nhất định mà không cần lùi transaction đó về lại trạng thái đầu trước khi diễn ra sự thay đổi. Lệnh SAVEPOINT chỉ được sử dụng để tạo ra SAVEPOINT trong mọi câu lệnh transaction.

Cú pháp SAVEPOINT:

SAVEPOINT SAVEPOINT_NAME;

Cú pháp cuộn lại một SAVEPOINT:

ROLLBACK TO SAVEPOINT_NAME;

Ví dụ: Tại bảng CUSTOMERS các bạn cần xóa bỏ 3 bản ghi khác nhau và trước mỗi lần xóa thực hiện tạo một SAVEPOINT, cho phép các bạn có thể XÓA trở lại SAVEPOINT bất cứ lúc nào để trả lại dwx liệu ban đầu.

  • Bảng CUSTOMERS:
1

2

3

4

5

6

7

8

9

10

11

+—-+———-+—–+———–+———-+

| ID | NAME | AGE | ADDRESS | SALARY |

+—-+———-+—–+———–+———-+

| 1 | Ha Anh | 32 | Da Nang | 2000.00 |

| 2 | Van Ha | 25 | Ha Noi | 1500.00 |

| 3 | Vu Bang | 23 | Vinh | 2000.00 |

| 4 | Thu Minh | 25 | Ha Noi | 6500.00 |

| 5 | Hai An | 27 | Ha Noi | 8500.00 |

| 6 | Hoang | 22 | Ha Noi | 4500.00 |

| 7 | Binh | 24 | Ha Noi | 10000.00 |

  • Các hoạt động:
1

2

3

4

5

6

7

8

9

10

11

+—-+———-+—–+———–+———-+

| ID | NAME | AGE | ADDRESS | SALARY |

+—-+———-+—–+———–+———-+

| 1 | Ha Anh | 32 | Da Nang | 2000.00 |

| 2 | Van Ha | 25 | Ha Noi | 1500.00 |

| 3 | Vu Bang | 23 | Vinh | 2000.00 |

| 4 | Thu Minh | 25 | Ha Noi | 6500.00 |

| 5 | Hai An | 27 | Ha Noi | 8500.00 |

| 6 | Hoang | 22 | Ha Noi | 4500.00 |

| 7 | Binh | 24 | Ha Noi | 10000.00 |

+—-+———-+—–+———–+———-+

Như vậy bạn đã thực hiện 3 lần xóa. Ví dụ, giờ bạn muốn khôi phục lại SAVEPOINT được định nghĩa là SP2. Do SP2 đã được tạo ra sau khi thực hiện lần xóa đầu tiên, 2 lần xóa cuối được khôi phục lại như sau:

1

2

3

4

5

6

7

8

9

10

11

12

SQL> SAVEPOINT SP1;

Savepoint created.

SQL> DELETE FROM CUSTOMERS WHERE ID=1;

1 row deleted.

SQL> SAVEPOINT SP2;

Savepoint created.

SQL> DELETE FROM CUSTOMERS WHERE ID=2;

1 row deleted.

SQL> SAVEPOINT SP3;

Savepoint created.

SQL> DELETE FROM CUSTOMERS WHERE ID=3;

1 row deleted.

Lưu ý: Kể từ khi khôi phục SP2 chỉ có lần xóa đầu tiên xảy ra.

1

2

ROLLBACK TO SP2;

Rollback complete.

2.4 Lệnh RELEASE SAVEPOINT trong SQL

Có tác dụng loại bỏ 1 SAVEPOINT đã tạo ra.

Cú pháp:

1

2

3

4

5

6

7

8

9

10

11

12

SELECT * FROM CUSTOMERS;

+—-+———-+—–+———–+———-+

| ID | NAME | AGE | ADDRESS | SALARY |

+—-+———-+—–+———–+———-+

| 2 | Van Ha | 25 | Ha Noi | 1500.00 |

| 3 | Vu Bang | 23 | Vinh | 2000.00 |

| 4 | Thu Minh | 25 | Ha Noi | 6500.00 |

| 5 | Hai An | 27 | Ha Noi | 8500.00 |

| 6 | Hoang | 22 | Ha Noi | 4500.00 |

| 7 | Binh | 24 | Ha Noi | 10000.00 |

+—-+———-+—–+———–+———-+

6 rows selected.

1RELEASE SAVEPOINT SAVEPOINT_NAME;

Các bạn sẽ không sử dụng được lệnh ROLLBACK nữa sau khi SAVEPOINT đã bị xóa.

2.5 Lệnh SET TRANSACTION trong SQL

Có tác dụng bắt đầu một transaction trong CSDL, dùng cho mục đích chỉ định đặc tính của transaction SQL sau.

Cú pháp:

SET TRANSACTION [ READ WRITE | READ ONLY ];

Trên đây là những thông tin cần biết về transaction SQL. Các bạn cần phải hiểu rõ các câu lệnh của chúng để có thể sử dụng đúng cách nhất.

Thảo Larskanis

@Thảo Larskanis

Lĩnh vực công nghệ thông tin, đặc biệt là cấu trúc dữ liệu ngày càng quan trọng và trở nên cần thiết hơn với nhiều doanh nghiệp. Nhận thấy rõ được tầm quan trọng của SQL, Thảo Nguyễn - người đã có nhiều năm học tập và làm việc trong lĩnh vực công nghệ thông tin đã quyết định thành lập một website chia sẻ kiến thức cũng như kinh nghiệm của bản thân về lĩnh vực SQL đến cho những bạn có đam mê và muốn hiểu rõ hơn về lĩnh vực này.