PostgreSQL - 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ẽ cùng lặn vào thế giới kỳ diệu của các giao dịch PostgreSQL. Đừng lo lắng nếu bạn chưa từng viết một dòng mã trước đây - tôi sẽ là người hướng dẫn thân thiện của bạn trong hành trình này. Cuối cùng của hướng dẫn này, bạn sẽ xử lý các giao dịch như một chuyên gia!

PostgreSQL - Transactions

Giao dịch là gì?

Trước khi chúng ta đi vào chi tiết, 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 ngân hàng này sang tài khoản khác. Bạn không muốn tiền biến mất khỏi một tài khoản mà không xuất hiện ở tài khoản khác, phải không? Đó là lúc giao dịch phát huy tác dụng. Chúng đảm bảo rằng một loạt các thao tác cơ sở dữ liệu hoặc tất cả đều thành công hoặc tất cả đều thất bại cùng một lúc. Đó là như một giao dịch "tất cả hoặc không có gì".

Điều khiển giao dịch

Bây giờ, hãy xem cách chúng ta điều khiển các giao dịch trong PostgreSQL. Chúng ta có một vài từ kỳ diệu (lệnh) để sử dụng:

Lệnh Mô tả
BEGIN Bắt đầu một giao dịch mới
COMMIT Lưu tất cả các thay đổi trong giao dịch
ROLLBACK Hoàn tác tất cả các thay đổi trong giao dịch

Hãy tưởng tượng các lệnh này như là đèn giao thông trên đường cao tốc cơ sở dữ liệu của chúng ta. BEGIN là đèn xanh nói "Đi!", COMMIT là cờ-checkered ở vạch đích, và ROLLBACK là đèn đỏ nói "Úi, hãy bắt đầu lại!".

Lệnh BEGIN

Hãy bắt đầu với lệnh BEGIN. Nó giống như nói "Được rồi PostgreSQL, chú ý! Chúng ta sắp làm điều quan trọng."

BEGIN;
-- Các thao tác cơ sở dữ liệu của bạn ở đây

Khi bạn gõ BEGIN, PostgreSQL sẵn sàng theo dõi tất cả các thay đổi bạn sắp thực hiện. Nó giống như mở một trang mới trong sổ tay của bạn - mọi thứ bạn viết bây giờ sẽ là một phần của giao dịch này.

Lệnh COMMIT

Tiếp theo là bạn thân COMMIT. Đây là nơi xảy ra phép màu!

BEGIN;
UPDATE accounts SET balance = balance - 100 WHERE account_id = 1;
UPDATE accounts SET balance = balance + 100 WHERE account_id = 2;
COMMIT;

Trong ví dụ này, chúng ta đang chuyển $100 từ tài khoản 1 sang tài khoản 2. COMMIT ở cuối cùng nói với PostgreSQL, "Được rồi, chúng ta đã xong ở đây. Làm cho các thay đổi này vĩnh viễn!" Nó giống như nhấn nút lưu trên trò chơi yêu thích của bạn - tiến trình của bạn bây giờ đã được khóa.

Lệnh ROLLBACK

Nhưng nếu có điều gì đó sai sót thì sao? Đó là lúc ROLLBACK đến cứu giúp!

BEGIN;
UPDATE accounts SET balance = balance - 1000000 WHERE account_id = 1;
-- Úi! Chúng tôi không có ý định chuyển một triệu đô la!
ROLLBACK;

ROLLBACK giống như cục tẩy đáng tin cậy của bạn. Nó xóa bỏ tất cả các thay đổi bạn đã thực hiện kể từ lần cuối cùng bạn sử dụng BEGIN. Trong ví dụ này, chúng tôi vô tình cố gắng chuyển một triệu đô la (thật tuyệt vời phải không?), nhưng ROLLBACK đã cứu chúng tôi khỏi một khách hàng rất giận dữ và có lẽ mất việc!

Ví dụ thực tế

Hãy tập hợp tất cả lại với một ví dụ phức tạp hơn. Hãy tưởng tượng chúng ta đang điều hành một cửa hàng sách trực tuyến nhỏ:

BEGIN;

-- Thêm một cuốn sách mới vào kho của chúng ta
INSERT INTO books (title, author, price) VALUES ('The PostgreSQL Wizard', 'Data McDatabase', 29.99);

-- Cập nhật số lượng tồn kho
UPDATE inventory SET stock = stock + 100 WHERE book_id = (SELECT id FROM books WHERE title = 'The PostgreSQL Wizard');

-- Úi! Chúng tôi nhận ra chúng tôi đã sai lầm trong giá cả
UPDATE books SET price = 24.99 WHERE title = 'The PostgreSQL Wizard';

-- Mọi thứ đều ổn, hãy làm cho các thay đổi này vĩnh viễn
COMMIT;

Trong giao dịch này, chúng ta:

  1. Thêm một cuốn sách mới vào danh mục của chúng ta
  2. Cập nhật số lượng tồn kho để hiển thị chúng ta có 100 bản sao trong kho
  3. Nhận ra chúng tôi đã định giá sách quá cao và điều chỉnh giá

Vì chúng tôi đã sử dụng giao dịch, tất cả các thay đổi này xảy ra cùng một lúc. Nếu bất kỳ phần nào trong số đó thất bại (có lẽ bảng tồn kho bị khóa vì một lý do nào đó), không có thay đổi nào sẽ được thực hiện. Điều này giữ cho cơ sở dữ liệu của chúng tôi nhất quán và cửa hàng sách trực tuyến của chúng tôi hoạt động mượt mà!

Nếu có điều gì đó sai sót thì sao?

Hãy xem một kịch bản nơi chúng ta cần sử dụng ROLLBACK:

BEGIN;

-- Thử cập nhật giá của một cuốn sách
UPDATE books SET price = 19.99 WHERE title = 'The PostgreSQL Wizard';

-- Ồ không! Chúng tôi vừa phát hiện ra rằng cuốn sách này đã hết hàng
-- Chúng tôi không muốn cập nhật giá của một cuốn sách chúng tôi không thể bán

ROLLBACK;

Ở đây, chúng tôi bắt đầu cập nhật giá của một cuốn sách, nhưng sau đó nhận ra rằng chúng tôi không nên bán nó. Bằng cách sử dụng ROLLBACK, chúng tôi đảm bảo rằng không có thay đổi nào được thực hiện trong cơ sở dữ liệu. Nó giống như toàn bộ giao dịch chưa từng xảy ra!

Kết luận

Và thế là bạn đã có nó, các bạn! Bạn vừa bước những bước đầu tiên vào thế giới của các giao dịch PostgreSQL. Nhớ rằng:

  • BEGIN bắt đầu giao dịch của bạn
  • COMMIT lưu các thay đổi của bạn
  • ROLLBACK là nút "hoàn tác" của bạn

Giao dịch giống như lưới an toàn cho các thao tác cơ sở dữ liệu của bạn. Chúng đảm bảo rằng dữ liệu của bạn vẫn nhất quán, ngay cả khi mọi thứ không diễn ra như kế hoạch.

Khi bạn tiếp tục hành trình PostgreSQL của mình, bạn sẽ thấy giao dịch trở thành bạn thân của bạn. Chúng sẽ giúp bạn ngủ ngon hơn, biết rằng các thao tác cơ sở dữ liệu của bạn an toàn và chắc chắn.

Tiếp tục thực hành, 保持好奇心, và trước khi bạn nhận ra, bạn sẽ trở thành pháp sư PostgreSQL của riêng bạn! Chúc mừng coding, và hy vọng rằng các giao dịch của bạn luôn COMMIT thành công!

Credits: Image by storyset