เหล่านี้คือคำสั่ง DML (Data Manipulation Language) ที่เปลี่ยนแปลงข้อมูล: INSERT เพิ่มแถว, UPDATE แก้ไขแถวที่มีอยู่, ลบแถว ต่างจาก (ซึ่งอ่านอย่างเดียว) คำสั่งเหล่านี้แก้ไขฐานข้อมูล — จึงต้องใช้ความระมัดระวัง โดยเฉพาะคำสั่ง
เหล่านี้คือคำสั่ง DML (Data Manipulation Language) ที่เปลี่ยนแปลงข้อมูล: INSERT เพิ่มแถว, UPDATE แก้ไขแถวที่มีอยู่, ลบแถว ต่างจาก (ซึ่งอ่านอย่างเดียว) คำสั่งเหล่านี้แก้ไขฐานข้อมูล — จึงต้องใช้ความระมัดระวัง โดยเฉพาะคำสั่ง
DELETESELECTWHERE-- insert one row
INSERT INTO users (name, email, age)
VALUES ('Ann', '[email protected]', 30);
-- insert multiple rows at once (efficient)
INSERT INTO users (name, email)
VALUES ('Bob', '[email protected]'), ('Carol', '[email protected]');
-- insert from a query
INSERT INTO archived_users SELECT * FROM users WHERE inactive = true;
คุณระบุคอลัมน์และค่า การ insert หลายแถวในคำสั่งเดียวมีประสิทธิภาพมากกว่าการ insert แยกหลาย ๆ ครั้ง
UPDATE users
SET age = 31, updated_at = NOW() -- set one or more columns
WHERE id = 5; -- ❗ WHICH rows to update
-- ❌ DANGER — no WHERE clause updates EVERY row in the table!
UPDATE users SET active = false; -- sets ALL users inactive 😱
สำคัญยิ่ง: UPDATE (หรือ DELETE) ที่ไม่มีคำสั่ง WHERE จะส่งผลต่อทุกแถวในตาราง การลืม WHERE เป็นข้อผิดพลาดที่ร้ายแรงและพบบ่อย — ตรวจสอบให้แน่ใจเสมอ
DELETE FROM users WHERE id = 5; -- delete a specific row
DELETE FROM users WHERE inactive = true; -- delete matching rows
-- ❌ DANGER — no WHERE deletes the ENTIRE table's contents!
DELETE FROM users;
✓ ALWAYS include a WHERE clause (unless you truly mean to affect all rows)
✓ Test the WHERE first with SELECT (SELECT * WHERE ... → see what you'd affect)
✓ Use TRANSACTIONS (BEGIN ... COMMIT/ROLLBACK) so you can undo mistakes
✓ DELETE vs TRUNCATE: TRUNCATE quickly empties a whole table (faster, but not row-by-row,
can't be rolled back in some DBs, resets auto-increment)
INSERT, UPDATE และ DELETE คือวิธีที่แอปพลิเคชันเปลี่ยนแปลงข้อมูล — เป็นพื้นฐานของแอปพลิเคชันใด ๆ ที่จัดเก็บและแก้ไขข้อมูล (การสร้างระเบียน การแก้ไข การลบ) ดังนั้นการเข้าใจมันจึงเป็นความรู้พื้นฐานที่จำเป็นในทุกวันควบคู่กับ SELECT
การรู้จักวิธี insert (เดี่ยว หลายแถว หรือจาก query), update (การกำหนดค่าคอลัมน์) และ delete แถวเป็นสิ่งจำเป็นสำหรับการดำเนินการที่แก้ไขข้อมูลทั้งหมด
จุดที่สำคัญที่สุดคืออันตรายของการขาดคำสั่ง WHERE: UPDATE หรือ DELETE ที่ไม่มี WHERE จะส่งผลต่อทุกแถวในตาราง — เป็นข้อผิดพลาดที่ร้ายแรงและพบบ่อยอย่างน่าประหลาดใจ ซึ่งสามารถลบล้างหรือทำลายข้อมูลทั้งหมดได้
การเข้าใจอันตรายนี้และ แนวปฏิบัติด้านความปลอดภัย (ใส่ WHERE เสมอ, ทดสอบเงื่อนไขด้วย SELECT ก่อน, ใช้ transaction เพื่อให้ย้อนกลับข้อผิดพลาดได้) เป็นความรู้สำคัญที่ป้องกันอุบัติเหตุข้อมูลสูญหายร้ายแรง
การรู้รายละเอียดที่เกี่ยวข้อง (การ insert หลายแถวอย่างมีประสิทธิภาพ, DELETE เทียบกับ TRUNCATE สำหรับการล้างตาราง) ช่วยเติมเต็มความรู้เชิงปฏิบัติ
เนื่องจากการแก้ไขข้อมูลเป็นพื้นฐานของแอปพลิเคชัน และเนื่องจากข้อผิดพลาดเรื่องการขาด WHERE ทั้งร้ายแรงและพบบ่อย (เป็นสาเหตุที่พบบ่อยของหายนะข้อมูลใน production จริง) การเชี่ยวชาญคำสั่ง DML เหล่านี้ — และโดยเฉพาะวินัยสำคัญเรื่องคำสั่ง WHERE และความปลอดภัยเชิง transaction — จึงเป็นความรู้หลักที่ต้องรู้สำหรับทุกคนที่เขียน SQL ที่เปลี่ยนแปลงข้อมูล ซึ่งความเสี่ยง (ข้อมูลสูญหายอย่างย้อนกลับไม่ได้) ทำให้แนวปฏิบัติด้านความปลอดภัยสำคัญพอ ๆ กับ syntax