ใช้ WHERE ... != เงื่อนไขลบแถวที่ไม่ตรงกับค่าที่ต้องการเก็บ
คำสั่ง DELETE FROM table WHERE column != 'value' จะลบแถวทั้งหมดที่คอลัมน์ไม่เท่ากับค่านั้น ทิ้งไว้เฉพาะแถวที่ตรง
ตัวอย่างสร้างตารางและข้อมูล
CREATE TABLE DemoTable (
Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
Subject VARCHAR(100)
);
INSERT INTO DemoTable (Subject) VALUES ('MySQL'), ('MongoDB'), ('Java');
ข้อมูลก่อนลบ
+----+---------+ | Id | Subject | +----+---------+ | 1 | MySQL | | 2 | MongoDB | | 3 | Java | +----+---------+
คำสั่งลบทุกแถวยกเว้น Subject = 'MongoDB'
DELETE FROM DemoTable WHERE Subject != 'MongoDB';
ข้อมูลหลังลบ (เหลือแถว Id=2)
+----+---------+ | Id | Subject | +----+---------+ | 2 | MongoDB | +----+---------+
คำอธิบาย: Subject != 'MongoDB' จะเป็น TRUE สำหรับ MySQL และ Java → ถูกลบ
⚠ ข้อควรระวัง:
- ไม่มี WHERE จะลบทุกแถว (TRUNCATE เร็วกว่า)
!=หรือ<>ไม่จับคู่ NULL (NULL != 'x' คือ UNKNOWN ไม่ใช่ TRUE) → แถวที่ Subject=NULL จะไม่ถูกลบ ต้องเพิ่มOR Subject IS NULLหากต้องการลบ NULL ด้วย- ควรทดสอบด้วย SELECT ก่อน:
SELECT * FROM DemoTable WHERE Subject != 'MongoDB'; - ใช้ Transaction หากต้องการ Rollback ได้:
START TRANSACTION; DELETE ...; ROLLBACK;/COMMIT;
ทางเลือก: เก็บแถวที่ต้องการแล้ว TRUNCATE + INSERT BACK (เร็วกว่าสำหรับตารางใหญ่ที่ลบส่วนใหญ่)