PostgreSQL - Truy vấn DELETE: Hướng dẫn cho người mới bắt đầu
Chào mừng các bạn, những người đam mê cơ sở dữ liệu! Hôm nay, chúng ta sẽ khám phá thế giới PostgreSQL và một trong những thao tác cơ bản của nó: truy vấn DELETE. Đừng lo lắng nếu bạn chưa bao giờ 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, giải thích mọi thứ từng bước một.
Truy vấn DELETE là gì?
Trước khi chúng ta đi vào chi tiết, hãy hiểu về truy vấn DELETE. Hãy tưởng tượng bạn có một cuốn sổ điện tử (đó là cơ sở dữ liệu) đầy thông tin. Đôi khi, bạn có thể muốn xóa bỏ một số trang hoặc mục. Đó chính xác là điều mà truy vấn DELETE làm trong PostgreSQL - nó xóa bỏ các hàng cụ thể khỏi bảng.
Cú pháp của truy vấn DELETE
Bây giờ, hãy nhìn vào cấu trúc cơ bản của một truy vấn DELETE:
DELETE FROM table_name
WHERE condition;
Hãy phân tích này:
-
DELETE FROM
: Đây là cách chúng ta bắt đầu truy vấn,告诉 PostgreSQL rằng chúng ta muốn xóa điều gì đó. -
table_name
: Đây là tên của bảng mà bạn muốn xóa dữ liệu. -
WHERE
: Đây là mệnh đề tùy chọn nhưng rất quan trọng. Nó xác định哪些 hàng cần xóa. -
condition
: Đây là nơi bạn xác định哪些 hàng nên bị xóa.
Hãy tưởng tượng như bạn đang đưa ra hướng dẫn cho một robot hữu ích: "Này robot, xóa bỏ từ cuốn sổ của tôi (bảng) nơi ngày là hôm qua."
Các ví dụ về truy vấn DELETE trong hành động
Ví dụ 1: Xóa tất cả các hàng
Hãy bắt đầu với một ví dụ đơn giản. Giả sử chúng ta có một bảng叫做 old_records
và chúng ta muốn xóa tất cả các hàng trong đó.
DELETE FROM old_records;
Truy vấn này sẽ xóa tất cả các hàng khỏi bảng old_records
. Hãy cẩn thận với truy vấn này - nó giống như xóa bỏ mọi thứ trong cuốn sổ của bạn!
Ví dụ 2: Xóa các hàng cụ thể
Bây giờ, hãy nói chúng ta có một bảng students
, và chúng ta muốn xóa tất cả các sinh viên đã tốt nghiệp:
DELETE FROM students
WHERE status = 'graduated';
Truy vấn này告诉 PostgreSQL xóa chỉ các hàng mà cột status
có giá trị 'graduated'. Nó giống như đi qua danh sách lớp và gạch bỏ tất cả các sinh viên đã tốt nghiệp.
Ví dụ 3: Xóa dựa trên nhiều điều kiện
Hãy làm cho nó phức tạp hơn một chút. Giả sử chúng ta có một bảng orders
, và chúng ta muốn xóa tất cả các đơn hàng đã hủy và hơn 30 ngày tuổi:
DELETE FROM orders
WHERE status = 'cancelled' AND order_date < CURRENT_DATE - INTERVAL '30 days';
Truy vấn này kết hợp hai điều kiện:
- Trạng thái đơn hàng phải là 'cancelled'
- Ngày đặt hàng phải hơn 30 ngày trước
Nó giống như dọn dẹp các đơn hàng pizza đã hủy từ tháng trước!
Ví dụ 4: Xóa với con truy vấn
Đôi khi, chúng ta cần xóa các hàng dựa trên thông tin trong bảng khác. Giả sử chúng ta muốn xóa tất cả các đơn hàng từ khách hàng không mua hàng trong một năm qua:
DELETE FROM orders
WHERE customer_id IN (
SELECT customer_id
FROM customers
WHERE last_purchase_date < CURRENT_DATE - INTERVAL '1 year'
);
Truy vấn này sử dụng một con truy vấn để tìm khách hàng không mua hàng trong một năm, sau đó xóa tất cả các đơn hàng từ những khách hàng đó. Nó giống như xóa bỏ tất cả các dấu vết của khách hàng lâu mất từ sổ đơn hàng của bạn.
An toàn trước hết: Sử dụng các giao dịch
Khi làm việc với các truy vấn DELETE, đặc biệt là với dữ liệu quan trọng, việc sử dụng các giao dịch là một thói quen tốt. Hãy tưởng tượng một giao dịch như một mạng an toàn - nếu điều gì đó出错, bạn có thể hoàn tác các thay đổi của mình.
Dưới đây là cách bạn có thể sử dụng một giao dịch:
BEGIN;
DELETE FROM students WHERE status = 'graduated';
-- Kiểm tra xem mọi thứ có tốt không
COMMIT;
-- Or nếu điều gì đó出错
-- ROLLBACK;
Bằng cách này, bạn có thể xem xét các thay đổi trước khi làm chúng vĩnh viễn (COMMIT) hoặc hoàn tác chúng nếu cần (ROLLBACK).
Các phương pháp DELETE phổ biến
Hãy tóm tắt một số phương pháp DELETE phổ biến trong bảng tiện ích:
Phương pháp | Mô tả | Ví dụ |
---|---|---|
Xóa tất cả các hàng | Xóa tất cả dữ liệu từ một bảng | DELETE FROM table_name; |
Xóa với điều kiện | Xóa các hàng thỏa mãn điều kiện cụ thể | DELETE FROM table_name WHERE condition; |
Xóa với con truy vấn | Xóa các hàng dựa trên dữ liệu từ một truy vấn khác | DELETE FROM table_name WHERE column IN (SELECT...); |
Xóa với join | Xóa các hàng dựa trên dữ liệu từ bảng được join | DELETE FROM table1 USING table2 WHERE table1.id = table2.id; |
Xóa với trả về | Xóa các hàng và trả về dữ liệu đã xóa | DELETE FROM table_name RETURNING *; |
Kết luận
Và thế là bạn đã có nó, các học sinh yêu quý! Chúng ta đã cùng nhau hành trình qua thế giới của truy vấn DELETE trong PostgreSQL, từ các xóa đơn giản đến các thao tác phức tạp hơn. Nhớ rằng, với quyền lực lớn đi kèm với trách nhiệm lớn - luôn kiểm tra lại các mệnh đề WHERE trước khi chạy một truy vấn DELETE.
Thực hành các ví dụ này, chơi với dữ liệu của riêng bạn, và sớm bạn sẽ xóa dữ liệu như một chuyên gia. Chỉ đừng vô tình xóa bài tập của bạn - tôi sẽ không chấp nhận "PostgreSQL đã ăn bài tập của tôi" làm lý do!
Chúc các bạn may mắn trong việc truy vấn, và mong rằng cơ sở dữ liệu của bạn luôn sạch sẽ và được bảo trì tốt!
Credits: Image by storyset