การลบข้อมูลด้วยเงื่อนไขหลายคอลัมน์ (AND)
ใช้ WHERE ร่วมกับ AND เพื่อระบุเงื่อนไขหลายคอลัมน์พร้อมกัน จะลบเฉพาะแถวที่ **ตรงทุกเงื่อนไข**
Syntax
DELETE FROM table_name WHERE column1 = value1 AND column2 = value2 ...;
ตัวอย่างการใช้งาน
สร้างตารางนักเรียน:
mysql> CREATE TABLE DemoTable722 (
StudentId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
StudentName VARCHAR(100),
StudentAge INT
);
Query OK, 0 rows affected (1.84 sec)
mysql> INSERT INTO DemoTable722 (StudentName, StudentAge) VALUES
('Chris Brown', 23), ('John Smith', 21), ('David Miller', 22),
('Adam Smith', 20), ('Carol Taylor', 24);
Query OK, 5 rows affected
ข้อมูลทั้งหมด:
mysql> SELECT * FROM DemoTable722;
+-----------+--------------+------------+ | StudentId | StudentName | StudentAge | +-----------+--------------+------------+ | 1 | Chris Brown | 23 | | 2 | John Smith | 21 | | 3 | David Miller | 22 | | 4 | Adam Smith | 20 | | 5 | Carol Taylor | 24 | +-----------+--------------+------------+ 5 rows in set (0.00 sec)
ลบแถวที่ StudentId = 3 **และ** StudentName = 'David Miller':
mysql> DELETE FROM DemoTable722 WHERE StudentId = 3 AND StudentName = 'David Miller'; Query OK, 1 row affected (0.21 sec)
ตรวจสอบผลลัพธ์ - แถว David Miller หายไป:
mysql> SELECT * FROM DemoTable722;
+-----------+--------------+------------+ | StudentId | StudentName | StudentAge | +-----------+--------------+------------+ | 1 | Chris Brown | 23 | | 2 | John Smith | 21 | | 4 | Adam Smith | 20 | | 5 | Carol Taylor | 24 | +-----------+--------------+------------+ 4 rows in set (0.00 sec)
เคล็ดลับความปลอดภัย
- **ทดสอบด้วย SELECT ก่อน DELETE:**
SELECT * FROM DemoTable722 WHERE StudentId = 3 AND StudentName = 'David Miller';
- ใช้
LIMIT 1ป้องกันลบผิดหลายแถว:DELETE ... WHERE ... LIMIT 1; - Backup หรือใช้ Transaction (
START TRANSACTION; DELETE ...; ROLLBACK/COMMIT;) - Foreign Key: หากมี FK อ้างอิง อาจลบไม่ได้ (ON DELETE RESTRICT) หรือลบแบบ Cascade
DELETE หลายเงื่อนไข OR
DELETE FROM table WHERE col1 = 'A' OR col2 = 'B'; -- ลบถ้าตรงอย่างน้อย 1 เงื่อนไข