Transaction trong SQL – học sql cơ bản đến nâng cao – VietTuts

Transaction trong SQL là một nhóm các câu lệnh SQL. Nếu một transaction được thực hiện thành công, tất cả các thay đổi dữ liệu được thực hiện trong transaction được lưu vào cơ sở dữ liệu. Nếu một transaction bị lỗi và được rollback, thì tất cả các sửa đổi dữ liệu sẽ bị xóa (dữ liệu được khôi phục về trạng thái trước khi thực hiện transaction).

Transaction có bốn đặc điểm tiêu chuẩn sau:

Các lệnh sau đây được sử dụng để xử lý transaction.

Các lệnh điều khiển transaction chỉ được sử dụng với các lệnh thao tác dữ liệu DML như – INSERT, UPDATE và DELETE.

Chúng không thể được sử dụng trong lệnh CREATE TABLE hoặc DROP TABLE vì các hoạt động này được tự động được commit trong cơ sở dữ liệu.

Lệnh COMMIT được sử dụng để lưu các thay đổi gọi bởi một transaction với cơ sở dữ liệu.

Lệnh COMMIT lưu tất cả các transaction vào cơ sở dữ liệu kể từ khi lệnh COMMIT hoặc ROLLBACK cuối cùng.

Cú pháp của lệnh COMMIT như sau.

Ví dụ

Giả sử bảng CUSTOMERS có các bản ghi sau đây:

Sau đây là một ví dụ có thể xóa các bản ghi từ bảng có age = 25 và sau đó COMMIT thay đổi trong cơ sở dữ liệu.

Vì vậy, hai hàng từ bảng sẽ bị xóa và câu lệnh SELECT sẽ cho kết quả sau.

Lệnh ROLLBACK được sử dụng để hoàn tác các transaction chưa được lưu vào cơ sở dữ liệu. Lệnh này chỉ có thể được sử dụng để hoàn tác các transaction kể từ khi lệnh COMMIT hoặc ROLLBACK cuối cùng được phát hành.

Cú pháp lệnh ROLLBACK như sau:

Ví dụ

Giả sử bảng CUSTOMERS có các bản ghi sau đây:

Sau đây là một ví dụ, có thể xóa các bản ghi từ bảng có age = 25 và sau đó XÓA các thay đổi trong cơ sở dữ liệu.

Vì vậy, hoạt động xóa sẽ không ảnh hưởng đến bảng và câu lệnh SELECT sẽ cho kết quả sau.

SAVEPOINT là một điểm trong một transaction khi bạn có thể cuộn transaction trở lại một điểm nhất định mà không quay trở lại toàn bộ transaction.

Cú pháp của lệnh SAVEPOINT như thể hiện dưới đây.

Lệnh này chỉ phục vụ trong việc tạo ra SAVEPOINT trong số tất cả các câu lệnh transaction. Lệnh ROLLBACK được sử dụng để hoàn tác một nhóm các transaction.

Cú pháp để cuộn lại một SAVEPOINT như thể hiện dưới đây.

Sau đây là ví dụ bạn định xóa ba bản ghi khác nhau từ bảng CUSTOMERS. Bạn muốn tạo một SAVEPOINT trước mỗi lần xoá, để bạn có thể XÓA trở lại SAVEPOINT bất kỳ lúc nào để trả lại dữ liệu thích hợp cho trạng thái ban đầu.

Ví dụ

Giả sử bảng CUSTOMERS có các bản ghi sau.

Khối mã sau đây có chứa hàng loạt các hoạt động.

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.