MySQL ลบแบบสอบถาม: วิธีลบแถวออกจากตาราง
⚡ สรุปอย่างชาญฉลาด
MySQL คำสั่ง DELETE ใช้สำหรับลบแถวที่ไม่ต้องการออกจากตาราง และแสดงจำนวนแถวที่ได้รับผลกระทบ เอกสารนี้จะอธิบายไวยากรณ์ของคำสั่ง DELETE การกรองด้วย WHERE การลบหลายแถวด้วย IN และทางเลือกที่ปลอดภัยกว่าอย่าง TRUNCATE และ DROP

แบบสอบถาม DELETE คืออะไร
การขอ MySQL ลบ คำสั่ง DELETE ใช้สำหรับลบแถวที่ไม่ต้องการออกจากตารางฐานข้อมูล โดยจะลบทั้งแถวออกจากตารางและแสดงจำนวนแถวที่ถูกลบ คำสั่ง DELETE มีประโยชน์เมื่อคุณต้องการล้างข้อมูลชั่วคราวหรือข้อมูลที่ล้าสมัยออกจากฐานข้อมูลของคุณ
คำสั่ง DELETE ใน MySQL สามารถลบข้อมูลมากกว่าหนึ่งแถวออกจากตารางได้ในการดำเนินการครั้งเดียว ซึ่งเป็นประโยชน์อย่างยิ่งเมื่อคุณต้องการลบข้อมูลจำนวนมากออกจากตารางฐานข้อมูล
เมื่อลบข้อมูลแถวใดแถวหนึ่งแล้ว จะไม่สามารถกู้คืนได้ ดังนั้นควรสำรองข้อมูลฐานข้อมูลก่อนลบข้อมูลเสมอ เพื่อให้สามารถกู้คืนและตรวจสอบฐานข้อมูลได้ในภายหลังหากจำเป็น
วิธีการลบแถวใน MySQL
เมื่อเข้าใจวัตถุประสงค์ของคำสั่งแล้ว ขั้นตอนต่อไปคือไวยากรณ์ ในการลบแถวใน MySQLมีการใช้คำสั่ง DELETE FROM:
DELETE FROM `table_name` [WHERE condition];
ที่นี่:
- ลบข้อมูลจาก `table_name` บอก MySQL เซิร์ฟเวอร์จะลบแถวออกจากตารางที่ระบุชื่อ
- [เงื่อนไขอยู่ที่ไหน] เป็นตัวเลือกเสริม และใช้สำหรับกำหนดตัวกรองเพื่อจำกัดจำนวนแถวที่ได้รับผลกระทบจากคำสั่ง DELETE
ถ้า WHERE ข้อ ไม่ได้ใช้ใน MySQL คำสั่งลบ จากนั้น ทั้งหมด แถวในตารางที่กำหนดจะถูกลบออก
⚠️คำเตือน: เรียกใช้ตัวกรองโดยใช้คำสั่ง SELECT ก่อน หากได้ผลลัพธ์ตรงกับแถวที่คุณต้องการลบ การใช้คำสั่ง DELETE ที่ตรงกันก็จะปลอดภัย ไวยากรณ์ฉบับเต็มมีเอกสารอธิบายไว้ใน... MySQL คู่มือคำสั่งลบ.
ตัวอย่างของการ MySQL ลบแบบสอบถาม
ส่วนถัดไปจะสร้างชุดข้อมูลขนาดเล็กแล้วลบข้อมูลออกจากชุดข้อมูลนั้น
ขั้นตอนที่ 1: ใส่ข้อมูลตัวอย่าง
ก่อนที่เราจะไปเจาะลึกรายละเอียดเกี่ยวกับคำสั่ง SQL DELETE กัน เรามาลองใส่ข้อมูลตัวอย่างลงในตาราง movies เพื่อใช้เป็นตัวอย่างกันก่อน
INSERT INTO `movies` (`title`, `director`, `year_released`, `category_id`) VALUES ('The Great Dictator', 'Charlie Chaplin', 1940, 7); INSERT INTO `movies` (`title`, `director`, `category_id`) VALUES ('sample movie', 'Anonymous', 8); INSERT INTO `movies` (`title`, `director`, `year_released`, `category_id`) VALUES ('movie 3', 'John Brown', 1920, 8);
การเรียกใช้สคริปต์ข้างต้นจะเพิ่มภาพยนตร์สาม (3) เรื่องลงในตารางภาพยนตร์ ก่อนที่จะดำเนินการต่อไป เรามาแสดงรายการภาพยนตร์ทั้งหมดในตารางของเรากัน
SELECT * FROM `movies`;
เมื่อรันสคริปต์ข้างต้นจะได้ผลลัพธ์ดังนี้ แถวที่เพิ่มเข้ามาใหม่ทั้งสามแถวจะถูกไฮไลต์ไว้
| movie_id | ชื่อเรื่อง | ผู้อำนวยการ | year_released | Category_id |
|---|---|---|---|---|
| 1 | โจรสลัดแห่งแคริบเบียน 4 | มาร์แชลล์ร็อบ | 2011 | 1 |
| 2 | ลืมซาราห์ มาร์แชล | นิโคลัสสตอลเลอร์ | 2008 | 2 |
| 3 | X-Men | NULL | 2008 | NULL |
| 4 | Code ชื่อ แบล็ค | เอ็ดการ์ จิมซ์ | 2010 | NULL |
| 5 | สาวน้อยของพ่อ | NULL | 2007 | 8 |
| 6 | เทวดาและปีศาจ | NULL | 2007 | 6 |
| 7 | Davinci Code | NULL | 2007 | 6 |
| 9 | Honey moonERS | จอห์น ชูลท์ซ | 2005 | 8 |
| 16 | 67% มีความผิด | NULL | 2012 | NULL |
| 18 | มหาราชจอมบงการ | แชปลินชาร์ลี | 1940 | 7 |
| 19 | ตัวอย่างภาพยนตร์ | ไม่ระบุชื่อ | NULL | 8 |
| 20 | ภาพยนตร์ 3 | บราวน์จอห์น | 1920 | 8 |
ขั้นตอนที่ 2: ลบแถวเดียว
สมมติว่าคลังวิดีโอ Myflix ไม่ต้องการให้เช่าภาพยนตร์เรื่อง “The Great Dictator” อีกต่อไปและต้องการลบออกจากฐานข้อมูล รหัสภาพยนตร์คือ 18 ดังนั้นสคริปต์ด้านล่างจะลบแถวนั้นออก
DELETE FROM `movies` WHERE `movie_id` = 18;
ดำเนินการสคริปต์ข้างต้นใน MySQL โต๊ะทำงาน คำสั่ง `on the myflix database deletes the movie with id 18 from the table.` จะลบภาพยนตร์ที่มีรหัส 18 ออกจากตาราง
ตอนนี้เรามาตรวจสอบสถานะปัจจุบันของตารางภาพยนตร์กันเถอะ
SELECT * FROM `movies`;
| movie_id | ชื่อเรื่อง | ผู้อำนวยการ | year_released | Category_id |
|---|---|---|---|---|
| 1 | โจรสลัดแห่งแคริบเบียน 4 | มาร์แชลล์ร็อบ | 2011 | 1 |
| 2 | ลืมซาราห์ มาร์แชล | นิโคลัสสตอลเลอร์ | 2008 | 2 |
| 3 | X-Men | NULL | 2008 | NULL |
| 4 | Code ชื่อ แบล็ค | เอ็ดการ์ จิมซ์ | 2010 | NULL |
| 5 | สาวน้อยของพ่อ | NULL | 2007 | 8 |
| 6 | เทวดาและปีศาจ | NULL | 2007 | 6 |
| 7 | Davinci Code | NULL | 2007 | 6 |
| 9 | Honey moonERS | จอห์น ชูลท์ซ | 2005 | 8 |
| 16 | 67% มีความผิด | NULL | 2012 | NULL |
| 19 | ตัวอย่างภาพยนตร์ | ไม่ระบุชื่อ | NULL | 8 |
| 20 | ภาพยนตร์ 3 | บราวน์จอห์น | 1920 | 8 |
หมายเหตุ:
- ภาพยนตร์ที่มีรหัส 18 จะไม่ปรากฏในชุดผลลัพธ์การค้นหาอีกต่อไป
- คุณไม่สามารถลบคอลัมน์เดียวออกจากตารางด้วยคำสั่ง DELETE ได้ คำสั่งนี้จะลบทั้งแถว หากต้องการลบข้อมูลในฟิลด์เดียว ให้ใช้คำสั่งอื่นแทน คำสั่งอัปเดต ซึ่งจะกำหนดค่าคอลัมน์นั้นเป็นค่าว่าง (NULL)
ขั้นตอนที่ 3: ลบหลายแถวด้วย IN
สมมติว่าเรามีรายชื่อภาพยนตร์ที่เราต้องการลบ แทนที่จะใช้คำสั่งแยกแต่ละแถว เราสามารถรวมเงื่อนไข WHERE เข้ากับตัวดำเนินการ IN ได้
DELETE FROM `movies` WHERE `movie_id` IN (20,21);
การเรียกใช้สคริปต์ข้างต้นจะลบภาพยนตร์ที่มี ID 20 และ 21 ออกจากตารางภาพยนตร์ของเราในครั้งเดียว
ลบ เทียบกับ ตัดทอน เทียบกับ เพิ่มเข้าไป MySQL
การลบ (DELETE) ไม่ใช่เพียงวิธีเดียวในการลบข้อมูลออกจากระบบ MySQLผู้เริ่มต้นมักเลือกใช้คำสั่งนี้ในขณะที่คำสั่งที่เร็วกว่าอาจเหมาะสมกว่า ดังนั้นตารางด้านล่างจึงเปรียบเทียบคำสั่งการลบทั้งสามแบบ
| คุณสมบัติ (Feature) | ลบ | ตัด | DROP |
|---|---|---|---|
| ประเภทคำสั่ง | ดราก้อน | DDL | DDL |
| WHERE ข้อ | ที่สนับสนุน | ไม่ได้รับการสนับสนุน | ไม่ได้รับการสนับสนุน |
| สิ่งที่ถูกลบออกไป | แถวที่เลือก | ทุกแถว | แถวและโครงสร้างตาราง |
| ย้อนกลับ | เป็นไปได้ภายในธุรกรรม | เป็นไปไม่ได้ (การยืนยันโดยปริยาย) | เป็นไปไม่ได้ (การยืนยันโดยปริยาย) |
| AUTO_INCREMENT | ตัวนับยังคงอยู่ | ตัวนับจะรีเซ็ตกลับไปที่ค่าเริ่มต้น | เคาน์เตอร์ถูกถอดออกพร้อมกับโต๊ะ |
| ความเร็วบนโต๊ะขนาดใหญ่ | ช้าๆ (ทีละแถว) | เร็วมาก | เร็วมาก |
ใช้คำสั่ง DELETE เมื่อคุณต้องการตัวกรองหรือความสามารถในการย้อนกลับ ตัดตาราง เมื่อต้องการล้างตารางอย่างรวดเร็วและรีเซ็ตตัวนับ AUTO_INCREMENT ให้ใช้คำสั่ง DROP เฉพาะเมื่อไม่ต้องการใช้งานตารางนั้นอีกต่อไปแล้ว เพราะคำสั่งนี้จะลบทั้งคำจำกัดความและข้อมูลออกไปด้วย
