Một transaction trong PostgreSQL là một giao dịch (phiên làm việc) xử lý tổ hợp nhiều lệnh SQL cùng một lúc. Nếu chương trình có vấn đề hoặc lỗi trong xử lý nó sẽ gọi ROLLBACK để hủy quá trình thực hiện. Lúc đó dữ liệu trong database sẽ không thay đổi.
Transaction đảm bảo tính toàn vẹn của dữ liệu.
Các lệnh trong PostgreSQL Transactions
Các lệnh sau được sử dụng để kiểm soát các giao dịch –
- BEGIN TRANSACTION – Để bắt đầu một Transaction
- COMMIT – Để lưu các thay đổi vào database, hoặc bạn có thể sử dụng lệnh END TRANSACTION.
- ROLLBACK – Hủy transaction và không thay đổi dữ liệu trong database.
Transaction chỉ được sử dụng với các lệnh DML là: INSERT, UPDATE, DELETE.
Sử dụng PostgreSQL Transaction
Để bắt đầu một transaction sử dụng lệnh:
BEGIN TRANSACTION; -- Hoặc BEGIN:
Để hoàn thành một transaction sử dụng lệnh:
COMMIT; -- Hoặc END TRANSACTION;
Để hủy một transaction
ROLLBACK;
VD 1: Ta có bảng users như sau
Thêm dữ liệu cho bảng và commit dữ liệu:
BEGIN TRANSACTION; INSERT INTO public.users(user_id, group_id, username, password, email) VALUES (5, 1, 'HieuDT', '123456', '[email protected]'), (6, 1, 'PhatML', '123456', '[email protected]'), (7, 1, 'Myttt', '123456', '[email protected]'); COMMIT;
BEGIN TRANSACTION; INSERT INTO public.users(user_id, group_id, username, password, email, created_at) VALUES (8, 1, 'HangNT', '123456', '[email protected]', '2019-12-14 00:00:05'); ROLLBACK;
Kết quả dữ liệu của bảng users sau khi sử dụng Transaction
Nếu gặp lỗi:
ERROR: current transaction is aborted, commands ignored until end of transaction block
Thì là do câu lệnh sql lỗi, transaction đang thực hiện dở dang. Chạy lệnh ROLLBACK để hủy transaction hiện tại.