Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

วิธีลบแถวทั้งหมดยกเว้นแถวเฉพาะใน MySQL

ใช้ 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 (เร็วกว่าสำหรับตารางใหญ่ที่ลบส่วนใหญ่)