PostgreSQL Xóa các hàng khỏi mục đã chọn

⚡ Tóm tắt thông minh

PostgreSQL Lệnh DELETE xóa một hoặc nhiều hàng khỏi bảng, và khi kết hợp với mệnh đề WHERE sẽ chỉ nhắm mục tiêu vào các bản ghi khớp với điều kiện, trong khi bỏ qua mệnh đề WHERE sẽ xóa mọi hàng trong bảng.

  • 📋 Cú pháp: Lệnh DELETE FROM table với điều kiện WHERE sẽ xóa các hàng khớp với điều kiện đó, và lệnh RETURNING có thể hiển thị lại dữ liệu đã bị xóa.
  • 🎯 Một điều kiện: Mệnh đề WHERE đơn chỉ xóa những hàng thỏa mãn một điều kiện kiểm tra.
  • Hai điều kiện: Việc kết hợp hai phép kiểm tra bằng toán tử AND giúp thu hẹp phạm vi xóa xuống chỉ còn các hàng cụ thể.
  • 🔗 Mệnh đề EXISTS: Lệnh EXISTS xóa các hàng trong một bảng dựa trên sự trùng khớp với các bản ghi trong một bảng khác.
  • 🖥️ pgAdmin: Các truy vấn xóa tương tự được hiển thị trực quan thông qua trình chỉnh sửa truy vấn pgAdmin.
  • 🤖 An toàn AI: Các trợ lý AI sẽ tự động thêm mệnh đề WHERE chính xác và đưa ra cảnh báo trước khi xóa toàn bộ bảng.

PostgreSQL Xóa các hàng khỏi bảng Select

Xóa truy vấn trong PostgreSQL

câu lệnh XÓA in PostgreSQL Lệnh này được sử dụng để xóa một hoặc nhiều bản ghi khỏi bảng. Để chỉ xóa các hàng đã chọn khỏi bảng, PostgreSQL Cho phép bạn kết hợp câu lệnh DELETE với mệnh đề WHERE; nếu không, nó sẽ xóa tất cả các bản ghi trong bảng.

PostgreSQL Xóa cú pháp truy vấn

Lệnh DELETE có thể được định nghĩa bằng cú pháp sau:

[ WITH [ RECURSIVE ] with-query [, ...] ]
DELETE FROM [ ONLY ] table-name [ * ] [ [ AS ] alias ]
    [ USING using-list ]
    [ WHERE condition(s) | WHERE CURRENT OF cursor-name]
    [ RETURNING * | output-expression [ [ AS ] output-name] [, ...] ]

Thông số Kỹ thuật

Các thông số sau có sẵn:

  • với truy vấnMệnh đề WITH cho phép bạn tham chiếu đến một hoặc nhiều truy vấn con bằng tên bên trong truy vấn DELETE.
  • tên bảng: tên bảng cần xóa bản ghi.
  • bí danh: là tên thay thế cho tên của bảng đích.
  • danh sách sử dụng: các biểu thức bảng cho phép sử dụng các cột từ các bảng khác trong mệnh đề WHERE.
  • điều kiện): Tùy chọn. Đây là các điều kiện phải được đáp ứng để các bản ghi bị xóa. Nếu phần này không được cung cấp, tất cả các bản ghi có tên bảng sẽ bị xóa.
  • tên con trỏ: Con trỏ được sử dụng trong điều kiện WHERE CURRENT OF. Hàng cuối cùng được con trỏ này truy xuất sẽ bị xóa.
  • biểu thức đầu ra: Biểu thức cần được xử lý và trả về bởi câu lệnh DELETE sau khi mỗi hàng được xóa.
  • tên đầu ra: tên được sử dụng cho cột được trả về.

Lưu ý rằng vì câu lệnh DELETE xóa toàn bộ hàng, bạn không cần phải chỉ định tên cột.

PostgreSQL Xóa truy vấn với một điều kiện

Lệnh DELETE có thể được sử dụng với một điều kiện duy nhất, được thiết lập bằng mệnh đề WHERE. Hãy xem xét bảng Price với dữ liệu sau:

Giá:

PostgreSQL Xóa truy vấn với một điều kiện

Hãy để chúng tôi xóa bản ghi có id là 4:

DELETE FROM Price
WHERE id = 4;

Lệnh trên xóa các bản ghi có ID là 4. Hãy xác nhận xem việc xóa có thành công hay không:

PostgreSQL Xóa truy vấn với một điều kiện

Hàng có id là 4 đã bị xóa.

Xóa truy vấn với hai điều kiện

PostgreSQL Câu lệnh DELETE cũng có thể nhận hai điều kiện. Hai điều kiện này cần được kết hợp bằng toán tử AND. Chúng ta sẽ sử dụng bảng sau:

Giá:

PostgreSQL Xóa truy vấn với hai điều kiện

Hãy xem xét ví dụ được đưa ra dưới đây:

DELETE FROM Price
WHERE id = 3
AND price = 300;

Trong lệnh trên, chúng ta đang xóa hàng có id là 3 và giá là 300. Bây giờ chúng ta có thể truy vấn bảng:

SELECT * FROM Price;

Điều này trả về như sau:

PostgreSQL Xóa truy vấn với hai điều kiện

Bản ghi có id là 3 và giá 300 đã bị xóa.

PostgreSQL Xóa truy vấn sử dụng điều kiện EXISTS

Với TỒN TẠI Trong một số trường hợp, bạn có thể làm cho thao tác DELETE phức tạp hơn. Đôi khi, có thể cần phải xóa các bản ghi trong một bảng dựa trên các bản ghi trong một bảng khác.

Vì mệnh đề FROM không cho phép bạn liệt kê các bản ghi từ nhiều hơn một bảng khi thực hiện thao tác xóa, nên mệnh đề EXISTS trở nên rất hữu ích. Chúng ta có hai bảng sau:

Sách:

PostgreSQL Xóa truy vấn sử dụng điều kiện EXISTS

Giá:

PostgreSQL Xóa truy vấn sử dụng điều kiện EXISTS

Sau đó chúng ta có thể chạy truy vấn sau:

DELETE FROM Book
WHERE EXISTS
  (SELECT 1
    FROM Price
    WHERE Price.id = Book.id
    AND price < 250 );

Lệnh này xóa các hàng trong bảng Book có ID trùng khớp với bảng Price và có giá dưới 250.

Bảng Book bây giờ như sau:

PostgreSQL Xóa truy vấn sử dụng điều kiện EXISTS

Bản ghi có id là 1 đã bị xóa.

Cách xóa một hàng trong PostgreSQL sử dụng pgAdmin

Bạn cũng có thể chạy các truy vấn xóa tương tự thông qua giao diện pgAdmin bằng cách làm theo các bước sau:

Với một điều kiện

Bước 1) Đăng nhập vào tài khoản pgAdmin của bạn. Mở pgAdmin và đăng nhập vào tài khoản bằng thông tin đăng nhập của bạn.

Bước 2) Tạo cơ sở dữ liệu demo.

  1. Từ thanh điều hướng ở bên trái, nhấp vào Cơ sở dữ liệu.
  2. Nhấp vào Bản trình diễn.

Xóa hàng trong PostgreSQL sử dụng pgAdmin

Bước 3) Nhập truy vấn bên dưới vào trình chỉnh sửa truy vấn:

DELETE FROM Price
WHERE id = 4;

Bước 4) Nhấp vào nút Thực hiện.

Xóa hàng trong PostgreSQL sử dụng pgAdmin

Bước 5) Hãy kiểm tra xem hàng đó đã bị xóa chưa:

Xóa hàng trong PostgreSQL sử dụng pgAdmin

Với hai điều kiện

Bước 1) Đăng nhập vào tài khoản pgAdmin của bạn.

Bước 2)

  1. Từ thanh điều hướng ở bên trái, nhấp vào Cơ sở dữ liệu.
  2. Nhấp vào Bản trình diễn.

Xóa hàng trong PostgreSQL sử dụng pgAdmin

Bước 3) Nhập truy vấn vào trình soạn thảo truy vấn:

DELETE FROM Price
WHERE id = 3
AND price = 300;

Bước 4) Nhấp vào nút Thực hiện.

Xóa hàng trong PostgreSQL sử dụng pgAdmin

Bước 5) Hãy để chúng tôi kiểm tra xem việc xóa có thành công hay không:

Xóa hàng trong PostgreSQL sử dụng pgAdmin

Sử dụng điều kiện EXISTS

Bước 1) Đăng nhập vào tài khoản pgAdmin của bạn.

Bước 2)

  1. Từ thanh điều hướng ở bên trái, nhấp vào Cơ sở dữ liệu.
  2. Nhấp vào Bản trình diễn.

Xóa hàng bằng điều kiện EXISTS trong pgAdmin

Bước 3) Nhập truy vấn vào trình soạn thảo truy vấn:

DELETE FROM Book
WHERE EXISTS
  (SELECT 1
    FROM Price
    WHERE Price.id = Book.id
    AND price < 250 );

Bước 4) Nhấp vào nút Thực hiện.

Xóa hàng bằng điều kiện EXISTS trong pgAdmin

Bước 5) Hãy để chúng tôi kiểm tra xem việc xóa có thành công hay không:

Xóa hàng bằng điều kiện EXISTS trong pgAdmin

Tải xuống Cơ sở dữ liệu được sử dụng trong Hướng dẫn này

Câu Hỏi Thường Gặp

Lệnh TRUNCATE xóa mọi hàng ngay lập tức và đặt lại bộ nhớ, nhưng bỏ qua mệnh đề WHERE và các trình kích hoạt trên từng hàng. Lệnh DELETE xóa các hàng được chọn bằng mệnh đề WHERE, kích hoạt các trình kích hoạt trên từng hàng và có thể được hoàn tác trong cùng một giao dịch.

Thêm mệnh đề USING: DELETE FROM member USING denylist WHERE member.phone = denylist.phone. Lệnh này kết hợp với bảng thứ hai và xóa các hàng khớp, cho kết quả tương tự như EXISTS nhưng với cú pháp kết hợp rõ ràng hơn.

Lệnh RETURNING sẽ in ra các cột từ các hàng vừa bị xóa trong cùng một câu lệnh. Ví dụ: DELETE FROM Price WHERE id = 4 RETURNING *, và PostgreSQL Trả về dữ liệu đã bị xóa để các ứng dụng có thể ghi nhật ký hoặc xác nhận sự thay đổi.

Đúng vậy. Hãy gói lệnh DELETE trong một giao dịch với lệnh BEGIN, sau đó chạy ROLLBACK để hoàn tác hoặc COMMIT để giữ lại. Cho đến khi bạn thực hiện COMMIT, các hàng đã xóa có thể được khôi phục, điều này giúp ngăn ngừa việc xóa nhầm.

Giữ lại một bản sao cho mỗi nhóm bằng cách sử dụng cột ctid ẩn: DELETE FROM Price a USING Price b WHERE a.ctid < b.ctid AND a.id = b.id. Thao tác này loại bỏ các hàng trùng lặp trong khi vẫn giữ lại một bản ghi duy nhất.

Trước tiên, hãy chạy bộ lọc tương tự dưới dạng câu lệnh SELECT, hoặc mở một giao dịch với câu lệnh BEGIN và sử dụng RETURNING để kiểm tra các hàng bị ảnh hưởng. RevViệc xem trước kết quả của mệnh đề WHERE trước khi COMMIT sẽ ngăn chặn việc xóa nhiều hàng hơn dự định.

Các trợ lý AI dịch các quy tắc bằng tiếng Anh thông thường thành câu lệnh DELETE với mệnh đề WHERE chính xác, đề xuất EXISTS hoặc USING cho việc xóa dữ liệu giữa các bảng và gắn cờ các câu lệnh thiếu điều kiện để xóa toàn bộ bảng.

Đúng vậy. Trợ lý AI sẽ xem xét từng lệnh DELETE, cảnh báo khi không có mệnh đề WHERE và đề xuất một giao dịch hoặc bản xem trước RETURNING, giảm nguy cơ xóa toàn bộ bảng một cách vô ý.

Tóm tắt bài viết này với: