Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Xóa tất cả dòng trừ một dòng cụ thể trong MySQL?

Giải pháp: DELETE với WHERE NOT

Sử dụng WHERE column != value hoặc WHERE NOT (column = value).

Ví dụ minh họa

Tạo bảng và dữ liệu

mysql> CREATE TABLE DemoTable (
    Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    Subject VARCHAR(100)
);

mysql> INSERT INTO DemoTable(Subject) VALUES('MySQL'), ('MongoDB'), ('Java');

Dữ liệu gốc

+----+---------+
| Id | Subject |
+----+---------+
| 1  | MySQL   |
| 2  | MongoDB |
| 3  | Java    |
+----+---------+

Xóa tất cả KHỎI 'MongoDB'

mysql> DELETE FROM DemoTable WHERE Subject != 'MongoDB';

Kết quả

+----+---------+
| Id | Subject |
+----+---------+
| 2  | MongoDB |
+----+---------+

Các cách viết tương đương

Cú phápGiải thích
WHERE Subject != 'MongoDB'Khác giá trị (standard)
WHERE Subject <> 'MongoDB'Khác giá trị (ANSI SQL)
WHERE NOT (Subject = 'MongoDB')Phủ định bằng
WHERE Subject NOT IN ('MongoDB')Dùng NOT IN (mở rộng nhiều giá trị)

⚠️ Cảnh báo quan trọng

  • Không có WHERE → XÓA TẤT CẢ DÒNG
  • NULL: NULL != 'MongoDB' trả về UNKNOWN (không TRUE) → dòng NULL KHÔNG bị xóa
  • Luôn TEST SELECT trước:
    SELECT * FROM DemoTable WHERE Subject != 'MongoDB';

An toàn hơn: Dùng Primary Key

-- Giữ lại Id = 2
DELETE FROM DemoTable WHERE Id != 2;

Xóa hàng loạt an toàn với Transaction

START TRANSACTION;
SELECT * FROM DemoTable WHERE Subject != 'MongoDB';  -- Kiểm tra
DELETE FROM DemoTable WHERE Subject != 'MongoDB';
-- Kiểm tra lại
SELECT * FROM DemoTable;
COMMIT;  -- Hoặc ROLLBACK nếu sai

TRUNCATE vs DELETE

Đặc điểmDELETETRUNCATE
WHERE clauseCóKhông
TriggerKích hoạtKhông
Auto_incrementGiữ nguyênReset về 1
RollbackCó (trong transaction)Không (DDL)
Tốc độChậm (row by row)Nhanh (deallocate pages)

→ Dùng DELETE khi cần WHERE, TRUNCATE khi xóa toàn bộ bảng.