MySQL ลบแบบสอบถาม: วิธีลบแถวออกจากตาราง

⚡ สรุปอย่างชาญฉลาด

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

  • 🗑️ คำแถลงหลัก: คำสั่ง DELETE FROM `table_name` [WHERE condition] จะลบทั้งแถวและแสดงจำนวนแถวที่ถูกลบ
  • ⚠️ ละเว้นในกรณีที่: การไม่ใส่เงื่อนไข WHERE จะลบทุกแถวในตาราง ดังนั้นควรกรองข้อมูลก่อนดำเนินการเสมอ
  • 🎯 Targetการลบ ed: เงื่อนไข `WHERE `movie_id` = 18 จะลบข้อมูลออก 1 รายการ ในขณะที่เงื่อนไข `WHERE `movie_id` IN (20,21) จะลบข้อมูลออกหลายรายการในคำสั่งเดียว
  • 🔁 การกระทำที่ไม่สามารถย้อนกลับได้: ข้อมูลที่ถูกลบจะไม่สามารถกู้คืนได้หากไม่มีการสำรองข้อมูล ดังนั้นโปรดสำรองข้อมูลฐานข้อมูลก่อนทำการลบข้อมูล
  • 📊 ขอบเขตระดับแถว: คำสั่ง DELETE จะลบทั้งแถวเท่านั้น หากต้องการล้างค่าในคอลัมน์เดียว ต้องใช้คำสั่ง UPDATE โดยใส่ค่า NULL แทน
  • 🇧🇷 ลบ เทียบกับ ตัดทอน เทียบกับ ลบทิ้ง: คำสั่ง DELETE ใช้สำหรับกรองแถว คำสั่ง 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 เฉพาะเมื่อไม่ต้องการใช้งานตารางนั้นอีกต่อไปแล้ว เพราะคำสั่งนี้จะลบทั้งคำจำกัดความและข้อมูลออกไปด้วย

คำถามที่พบบ่อย

เฉพาะภายในธุรกรรมที่เปิดอยู่เท่านั้น เรียกใช้คำสั่ง START TRANSACTION จากนั้นดำเนินการ DELETE แล้วใช้คำสั่ง ROLLBACK เพื่อยกเลิกการกระทำ หลังจาก COMMIT หรือเมื่อเปิดใช้งาน autocommit ข้อมูลในแถวนั้นจะหายไป และสามารถกู้คืนได้เฉพาะจากไฟล์สำรองข้อมูลเท่านั้น

ใช้คำสั่ง DELETE แบบหลายตารางร่วมกับ สมัครโดยระบุชื่อตารางทั้งสองก่อนคำว่า FROM หรืออีกทางเลือกหนึ่งคือ กำหนดคีย์ต่างประเทศด้วย ON DELETE CASCADE เพื่อให้แถวลูกถูกลบโดยอัตโนมัติเมื่อแถวหลักถูกลบ

โหมดการอัปเดตที่ปลอดภัยถูกเปิดใช้งานโดยค่าเริ่มต้นใน MySQL ม้านั่งทำงานของช่างเครื่อง. ฟังก์ชันนี้จะปฏิเสธคำสั่ง DELETE ใดๆ ที่เงื่อนไข WHERE ไม่ได้ใช้คอลัมน์หลัก เพื่อป้องกันการลบข้อมูลทั้งตารางโดยไม่ตั้งใจ คุณสามารถปิดใช้งานได้ที่ แก้ไข > การตั้งค่า > ตัวแก้ไข SQL

ใช่แล้ว ผู้ช่วย AI จะแปลงคำขอภาษาอังกฤษธรรมดาให้เป็นไวยากรณ์ DELETE และสามารถอธิบายเงื่อนไข WHERE ได้ อย่างไรก็ตาม ควรตรวจสอบตัวกรองที่สร้างขึ้นกับคำสั่ง SELECT ก่อนเสมอ เพราะโมเดล AI ไม่สามารถมองเห็นข้อมูลจริงของคุณได้

ไม่ ให้ AI ร่างคำสั่ง แต่ให้ลองรันคำสั่งนั้นด้วยตัวเองบนสำเนาสำรองหรือสำเนาทดสอบก่อน หากไม่มีเงื่อนไข WHERE จะลบทุกแถว และไม่มีเครื่องมือ AI ใดสามารถย้อนกลับได้เมื่อธุรกรรมได้รับการยืนยันแล้ว

สรุปโพสต์นี้ด้วย: