PL/SQL - Giao dịch: Hướng dẫn cho người mới bắt đầu
Xin chào các pháp sư cơ sở dữ liệu tương lai! Hôm nay, chúng ta sẽ bắt đầu một chuyến hành trình đầy thú vị vào thế giới của các giao dịch PL/SQL. Đừng lo lắng nếu bạn là người mới bắt đầu lập trình; tôi sẽ là người hướng dẫn thân thiện của bạn, giải thích mọi thứ từng bước. Vậy, chúng ta hãy cùng nhảy vào!
Giao dịch là gì?
Trước khi chúng ta bắt đầu, hãy hiểu giao dịch là gì. Hãy tưởng tượng bạn đang chuyển tiền từ tài khoản tiết kiệm của bạn sang tài khoản thanh toán. Hoạt động này bao gồm hai bước:
- Trừ tiền khỏi tài khoản tiết kiệm
- Thêm tiền vào tài khoản thanh toán
Cả hai bước này cùng nhau tạo thành một giao dịch. Điều quan trọng là hoặc cả hai bước đều xảy ra, hoặc không có bước nào xảy ra. Chúng ta không muốn tiền biến mất hoặc xuất hiện ra khỏi không khí!
Bắt đầu và kết thúc một giao dịch
Trong PL/SQL, giao dịch bắt đầu tự động khi bạn thực thi lệnh đầu tiên của DML (Ngôn ngữ Thao tác Dữ liệu). Các lệnh này bao gồm INSERT, UPDATE và DELETE. Hãy xem một ví dụ:
BEGIN
INSERT INTO employees (employee_id, first_name, last_name)
VALUES (1001, 'John', 'Doe');
UPDATE employees
SET salary = 50000
WHERE employee_id = 1001;
END;
/
Trong ví dụ này, ngay khi lệnh INSERT được thực thi, một giao dịch bắt đầu. Giao dịch tiếp tục với lệnh UPDATE.
Chấp nhận một giao dịch
Hiện tại, bạn có thể tự hỏi, "Được rồi, chúng ta đã bắt đầu một giao dịch, nhưng làm thế nào để kết thúc nó?" Đó là câu hỏi tuyệt vời! Chúng ta sử dụng lệnh COMMIT để kết thúc giao dịch và làm cho tất cả các thay đổi trở nên vĩnh viễn. Hãy sửa đổi ví dụ trước của chúng ta:
BEGIN
INSERT INTO employees (employee_id, first_name, last_name)
VALUES (1001, 'John', 'Doe');
UPDATE employees
SET salary = 50000
WHERE employee_id = 1001;
COMMIT;
END;
/
Bằng cách thêm lệnh COMMIT ở cuối, chúng ta đang nói với cơ sở dữ liệu, "Đúng vậy, tôi chắc chắn về những thay đổi này. Hãy làm cho chúng trở nên vĩnh viễn."
Tại sao COMMIT lại quan trọng
Hãy tưởng tượng bạn đang nướng bánh. Bạn đã trộn tất cả các nguyên liệu, nhưng cho đến khi bạn cho nó vào lò nướng, nó vẫn chưa thực sự là một bánh. Tương tự, cho đến khi bạn COMMIT giao dịch của bạn, các thay đổi không phải là vĩnh viễn trong cơ sở dữ liệu.
Hoàn tác giao dịch
Đôi khi, mọi thứ không diễn ra theo kế hoạch. Có thể bạn nhận ra rằng bạn đã phạm sai lầm trong giao dịch của mình. Đừng lo lắng! PL/SQL cung cấp cho chúng ta một mạng an toàn gọi là ROLLBACK. Nó giống như một nút "hoàn tác" cho các thao tác cơ sở dữ liệu của bạn.
BEGIN
UPDATE employees
SET salary = salary * 2; -- Ồ! Chúng tôi không có ý định gấp đôi lương của mọi người!
ROLLBACK; -- Phew! Khủng hoảng đã được giải quyết.
END;
/
Trong ví dụ này, chúng tôi vô tình gấp đôi lương của mọi người (thật tuyệt vời nếu điều đó xảy ra!). Nhưng nhờ vào ROLLBACK, chúng tôi có thể hoàn tác thay đổi này trước khi nó trở thành vĩnh viễn.
Kiểm soát giao dịch tự động
PL/SQL cũng cung cấp kiểm soát giao dịch tự động trong một số trường hợp. Hãy xem bảng các tình huống này:
Tình huống | Hành động |
---|---|
Kết thúc bình thường của một khối PL/SQL | AUTO COMMIT |
Lỗi thời gian chạy trong một giao dịch | AUTO ROLLBACK |
Lệnh EXIT của SQL*Plus (không có COMMIT) | AUTO ROLLBACK |
Lỗi hệ thống | AUTO ROLLBACK |
Ví dụ về hoàn tác tự động
BEGIN
UPDATE employees
SET salary = salary / 0; -- Ồ! Lỗi chia cho không
END;
/
Trong trường hợp này, PL/SQL sẽ tự động hoàn tác giao dịch do lỗi thời gian chạy.
Điểm kiểm tra: Tạo các điểm kiểm tra trong giao dịch của bạn
Đôi khi, bạn có thể muốn hoàn tác một phần của giao dịch, nhưng không phải tất cả. Đó là khi các điểm kiểm tra trở nên hữu ích. Chúng giống như các điểm kiểm tra trong trò chơi điện tử - bạn có thể quay lại chúng nếu mọi thứ đi sai hướng.
BEGIN
INSERT INTO employees (employee_id, first_name, last_name)
VALUES (1002, 'Jane', 'Smith');
SAVEPOINT after_insert;
UPDATE employees
SET salary = 60000
WHERE employee_id = 1002;
-- Ồ, chúng tôi thay đổi ý kiến về lương
ROLLBACK TO after_insert;
COMMIT;
END;
/
Trong ví dụ này, chúng tôi chèn một nhân viên mới và tạo một điểm kiểm tra. Sau đó, chúng tôi cập nhật lương, nhưng quyết định hoàn tác cập nhật lương và quay lại điểm kiểm tra.
Các nguyên tắc tốt nhất khi sử dụng giao dịch
- Giữ giao dịch ngắn: Giao dịch dài có thể khóa tài nguyên và ảnh hưởng đến hiệu suất hệ thống.
- Sử dụng các lệnh COMMIT rõ ràng: Mặc dù PL/SQL có thể tự động commit trong một số trường hợp, nhưng tốt hơn hết là nên rõ ràng về khi bạn muốn commit các thay đổi.
- Xử lý ngoại lệ đúng cách: Đảm bảo bao gồm xử lý ngoại lệ phù hợp để tránh các commit hoặc rollback không mong muốn.
- Sử dụng các điểm kiểm tra cho các giao dịch phức tạp: Nếu bạn có một giao dịch dài, hãy xem xét sử dụng các điểm kiểm tra để cho phép rollback từng phần.
Kết luận
Và đây bạn có nó, các bạn! Chúng ta đã cùng nhau hành trình qua thế giới của các giao dịch PL/SQL, từ việc bắt đầu và kết thúc chúng, đến việc commit và rollback, và thậm chí là tạo các điểm kiểm tra. Nhớ rằng, giao dịch giống như dây an toàn của các thao tác cơ sở dữ liệu - chúng đảm bảo rằng dữ liệu của bạn vẫn nhất quán và đáng tin cậy.
Thực hành các khái niệm này, thử nghiệm với các tình huống khác nhau, và sớm bạn sẽ quản lý giao dịch như một chuyên gia. Chúc các bạn may mắn và các giao dịch của bạn luôn là ACID (đó là một câu đùa về cơ sở dữ liệu cho một ngày khác)!
Credits: Image by storyset