- Chuyên mục khác :
- Git cơ bản và nâng cao
- ·
- MySQL cơ bản và nâng cao
- ·
- MongoDB cơ bản và nâng cao
- ·
- SQL cơ bản và nâng cao
- ·
- Linux cơ bản và nâng cao
- Cơ bản về SQL
- Học SQL cơ bản và nâng cao
- SQL là gì
- Các khái niệm RDBMS trong SQL
- RDBMS Database trong SQL
- Cú pháp SQL cơ bản
- Kiểu dữ liệu trong SQL
- Toán tử trong SQL
- Biểu thức trong SQL
- SQL Database
- Lệnh CREATE DATABASE trong SQL
- Lệnh DROP Database trong SQL
- Lệnh SELECT DATABASE trong SQL
- Lệnh RENAME DATABASE trong SQL
- SQL Table
- CREATE Table trong SQL - Tạo bảng trong SQL
- Lệnh DROP Table trong SQL
- DELETE trong SQL
- Lệnh RENAME Table trong SQL
- Lệnh TRUNCATE TABLE trong SQL
- Lệnh ALTER TABLE trong SQL
- Mô phỏng bảng trong SQL
- Bảng tạm (Temporary Table) trong SQL
- Nhóm lệnh thao tác cơ bản
- UPDATE trong SQL
- Truy vấn INSERT trong SQL
- Truy vấn SELECT trong SQL
- Mệnh đề ORDER BY trong SQL
- Mệnh đề GROUP BY trong SQL
- Từ khóa DISTINCT trong SQL
- Sắp xếp kết quả trong SQL
- Mệnh đề trong SQL
- Mệnh đề WHERE trong SQL
- Toán tử liên hợp AND và OR trong SQL
- Mệnh đề With trong SQL
- Mệnh đề LIKE trong SQL
- Mệnh đề TOP, LIMIT, ROWNUM trong SQL
- Hoạt động SQL nâng cao
- Mệnh đề UNION trong SQL
- Giá trị NULL trong SQL
- Alias trong SQL
- Chỉ mục (Index) trong SQL
- Sử dụng View trong SQL
- Mệnh đề HAVING trong SQL
- Transaction trong SQL
- Toán tử wildcard trong SQL
- Truy vấn con trong SQL
- Sử dụng Sequence trong SQL
- Xử lý bản sao trong SQL (DISTINCT)
- Injection trong SQL
- Ràng buộc trong SQL
- Ràng buộc (Constraint) trong SQL
- Ràng buộc NOT NULL trong SQL
- Ràng buộc DEFAULT trong SQL
- Ràng buộc UNIQUE trong SQL
- Ràng buộc PRIMARY KEY trong SQL
- Ràng buộc FOREIGN KEY trong SQL
- Ràng buộc CHECK trong SQL
- Ràng buộc INDEX trong SQL
- SQL Join
- Mệnh đề JOINS trong SQL
- INNER JOIN trong SQL
- LEFT JOIN trong SQL
- RIGHT JOIN trong SQL
- FULL JOIN trong SQL
- SELF JOIN trong SQL
- CARTESIAN JOIN hoặc CROSS JOIN trong SQL
- Hàm trong SQL
- Hàm hữu ích trong SQL
- Hàm xử lý Date và Time trong SQL
- Hàm xử lý số trong SQL
- Hàm xử lý chuỗi trong SQL
- Tài liệu SQL tham khảo
- First Normal Form (1NF) trong SQL
- Second Normal Form (2NF) trong SQL
- Third Normal Form (3NF) trong SQL
- Tuning DB trong SQL
- Tài liệu SQL tham khảo
Transaction trong SQL là một đơn vị công việc được thực hiện bởi một Database. Transaction là đơn vị hoặc dãy công việc được thực hiện theo một thứ tự logic và hợp lý, có thể được thao tác bởi người dùng hoặc bởi một Database program.
Một transaction là một sự lan truyền của một hoặc nhiều thay đổi tới Database. Ví dụ, nếu bạn đang tạo một bản ghi hoặc cập nhật một bản ghi hoặc xóa một bản ghi từ một bảng, thì bạn đang thực hiện transaction trên bảng đó. Nó là quan trọng để điều khiển các transaction để bảo đảm toàn vẹn dữ liệu và để xử lý các Database Error.
Thực tế, bạn sẽ tập hợp nhiều truy vấn SQL vào trong một nhóm và sẽ thực thi tất cả truy vấn này cùng với nhau như là một phần của một transaction.
Property của Transaction trong SQL
Transaction có 4 property chuẩn, thường được tham chiếu bởi tên lược danh là ACID:
Atomicity: bảo đảm rằng tất cả hoạt động bên trong đơn vị công việc được hoàn thành một cách thành công; nếu không, transaction bị ngừng ở điểm thất bại, và các hoạt động trước được trao trả về trạng thái trước đó.
Consistency: bảo đảm rằng Database thay đổi một cách chính xác trạng thái theo một transaction đã được ký thác thành công.
Isolation: cho các transaction khả năng hoạt động một cách độc lập và không liên quan đến nhau.
Durability: bảo đảm rằng kết quả hoặc tác động của một transaction, mà đã được ký thác, vẫn còn tồn tại trong trường hợp hệ thống thất bại.
Điều khiển transaction trong SQL
Trong SQL, có các lệnh sau được sử dụng để điều khiển transaction:
COMMIT: để lưu các thay đổi.
ROLLBACK: để quay trở lại trạng thái trước khi có thay đổi.
SAVEPOINT: tạo các điểm (point) bên trong các nhóm transaction để ROLLBACK, tức là để quay trở lại điểm trạng thái đó.
SET TRANSACTION: đặt một tên cho một transaction.
Các lệnh điều khiển transaction chỉ được sử dụng với các lệnh INSERT, UPDATE và DELETE. Chúng không thể được sử dụng trong khi tạo và xóa bảng, bởi vì những hoạt động này được ký thác tự động trong Database.
Lệnh COMMIT trong SQL
Lệnh COMMIT là lệnh điều khiển transaction được sử dụng để lưu các thay đổi đã được triệu hồi bởi một transaction tới Database.
Lệnh COMMIT lưu giữ tất cả transaction trong Database từ lệnh COMMIT hoặc ROLLBACK cuối cùng.
Cú pháp cơ bản của lệnh COMMIT là như sau:
COMMIT;
Ví dụ
Bảng SINHVIEN có các bản ghi sau:
+----+---------+-----+-----------+--------+ | ID | TEN | TUOI| KHOAHOC | HOCPHI | +----+---------+-----+-----------+---------+ | 1 | Hoang | 21 | CNTT | 4000000 | | 2 | Viet | 19 | DTVT | 3000000 | | 3 | Thanh | 18 | KTDN | 4000000 | | 4 | Nhan | 19 | CK | 4500000 | | 5 | Huong | 20 | TCNH | 5000000 | +----+---------+-----+-----------+---------+
Ví dụ sau sẽ xóa các bản ghi từ bảng mà có tuoi = 19 và sau đó COMMIT các thay đổi vào trong Database.
SQL> DELETE FROM SINHVIEN WHERE TUOI = 19; SQL> COMMIT;
Trong kết quả thu được, hai hàng của bảng sẽ bị xóa và lệnh SELECT sẽ cho kết quả sau:
+----+----------+-----+-----------+----------+ | ID | TEN | TUOI| KHOAHOC | HOCPHI | +----+---------+-----+-----------+---------+ | 1 | Hoang | 21 | CNTT | 4000000 | | 3 | Thanh | 18 | KTDN | 4000000 | | 5 | Huong | 20 | TCNH | 5000000 | +----+----------+-----+-----------+----------+
Lệnh ROLLBACK trong SQL
Lệnh ROLLBACK là lệnh điều khiển transaction được sử dụng để trao trả transaction về trạng thái trước khi có các thay đổi mà chưa được lưu tới Database.
Lệnh ROLLBACK chỉ có thể được sử dụng để undo các transaction từ lệnh COMMIT hoặc ROLLBACK cuối cùng được thông báo.
Cú pháp cơ bản của lệnh ROLLBACK như sau:
ROLLBACK;
Ví dụ
Bảng SINHVIEN có các bản ghi sau:
+----+---------+-----+-----------+--------+ | ID | TEN | TUOI| KHOAHOC | HOCPHI | +----+---------+-----+-----------+---------+ | 1 | Hoang | 21 | CNTT | 4000000 | | 2 | Viet | 19 | DTVT | 3000000 | | 3 | Thanh | 18 | KTDN | 4000000 | | 4 | Nhan | 19 | CK | 4500000 | | 5 | Huong | 20 | TCNH | 5000000 | +----+---------+-----+-----------+---------+
Bây giờ sử dụng lệnh ROLLBACK với lệnh xóa tuoi = 19, mà chưa được commit như sau:
SQL> DELETE FROM SINHVIEN WHERE TUOI = 19; SQL> ROLLBACK;
Trong kết quả thu được, hoạt động Delete này không ảnh hưởng tới bảng và lệnh SELECT sẽ cho kết quả:
+----+---------+-----+-----------+--------+ | ID | TEN | TUOI| KHOAHOC | HOCPHI | +----+---------+-----+-----------+---------+ | 1 | Hoang | 21 | CNTT | 4000000 | | 2 | Viet | 19 | DTVT | 3000000 | | 3 | Thanh | 18 | KTDN | 4000000 | | 4 | Nhan | 19 | CK | 4500000 | | 5 | Huong | 20 | TCNH | 5000000 | +----+---------+-----+-----------+---------+
Lệnh SAVEPOINT trong SQL
Một SAVEPOINT là một điểm (point) trong một transaction khi bạn có thể lùi transaction về một điểm cụ thể mà không cần lùi transaction về trạng thái đầu trước khi có thay đổi đó.
Cú pháp cơ bản của lệnh SAVEPOINT như sau:
SAVEPOINT TEN_CUA_SAVEPOINT;
Lệnh này chỉ phục vụ trong việc tạo một SAVEPOINT trong các lệnh điều khiển transaction. Lệnh ROLLBACK được sử dụng để undo một nhóm các transaction.
Cú pháp để lùi về một SAVEPOINT như sau:
ROLLBACK TO TEN_CUA_SAVEPOINT;
Trong ví dụ sau, bạn muốn xóa 3 bản ghi khác nhau từ bảng SINHVIEN. Bạn muốn tạo một SAVEPOINT trước mỗi lệnh DELETE, để mà bạn có thể ROLLBACK về bất kỳ SAVEPOINT nào tại bất cứ lúc nào để trả dữ liệu thích hợp về trạng thái ban đầu của nó.
Ví dụ
Bảng SINHVIEN có các bản ghi sau:
+----+---------+-----+-----------+--------+ | ID | TEN | TUOI| KHOAHOC | HOCPHI | +----+---------+-----+-----------+---------+ | 1 | Hoang | 21 | CNTT | 4000000 | | 2 | Viet | 19 | DTVT | 3000000 | | 3 | Thanh | 18 | KTDN | 4000000 | | 4 | Nhan | 19 | CK | 4500000 | | 5 | Huong | 20 | TCNH | 5000000 | +----+---------+-----+-----------+---------+
Dưới đây là một dãy các hoạt động:
SQL> SAVEPOINT SP1; Savepoint created. SQL> DELETE FROM SINHVIEN WHERE ID=1; 1 row deleted. SQL> SAVEPOINT SP2; Savepoint created. SQL> DELETE FROM SINHVIEN WHERE ID=2; 1 row deleted. SQL> SAVEPOINT SP3; Savepoint created. SQL> DELETE FROM SINHVIEN WHERE ID=3; 1 row deleted.
Ở trên, có 3 hoạt động xóa diễn ra. Sau một lúc, bạn thay đổi suy nghĩ và quyết định ROLLBACK về SAVEPOINT mà bạn đã xác định là SP2. Bởi vì SP2 được tạo sau hoạt động xóa đầu tiên, do đó hai hoạt động xóa cuối cùng được undo.
SQL> ROLLBACK TO SP2; Rollback complete.
Chú ý rằng, chỉ có hoạt động xóa đầu tiên diễn ra khi bạn rollback về SP2.
SQL> SELECT * FROM SINHVIEN; +----+---------+-----+-----------+--------+ | ID | TEN | TUOI| KHOAHOC | HOCPHI | +----+---------+-----+-----------+---------+ | 2 | Viet | 19 | DTVT | 3000000 | | 3 | Thanh | 18 | KTDN | 4000000 | | 4 | Nhan | 19 | CK | 4500000 | | 5 | Huong | 20 | TCNH | 5000000 | +----+---------+-----+-----------+---------+ 4 rows selected.
Lệnh RELEASE SAVEPOINT trong SQL
Lệnh RELEASE SAVEPOINT được sử dụng để xóa một SAVEPOINT mà bạn đã tạo.
Cú pháp cơ bản của lệnh RELEASE SAVEPOINT trong SQL như sau:
RELEASE SAVEPOINT TEN_CUA_SAVEPOINT;
Một khi một SAVEPOINT đã bị xóa, bạn không thể sử dụng lệnh ROLLBACK để lùi transaction về SAVEPOINT đó nữa.
Lệnh SET TRANSACTION trong SQL
Lệnh SET TRANSACTION có thể được sử dụng để khởi tạo một Database Transaction. Lệnh này được sử dụng để xác định đặc trưng cho transaction đó.
Ví dụ, bạn có thể xác định một transaction là read only hoặc read write.
Cú pháp cơ bản của lệnh SET TRANSACTION trong SQL như sau:
SET TRANSACTION [ READ WRITE | READ ONLY ];
Bình luận (0)