🗄️ MySQL/MariaDB

วิธีใช้ UPDATE และ DELETE ใน MySQL และ MariaDB ให้ปลอดภัย ไม่เผลอลบข้อมูลหายทั้งตาราง

8 นาที 17 views บันทึกเป็น PDF
วิธีใช้ UPDATE และ DELETE ใน MySQL และ MariaDB ให้ปลอดภัย ไม่เผลอลบข้อมูลหายทั้งตาราง

มือใหม่หัดใช้ฐานข้อมูลต้องอ่าน! เรียนรู้วิธีแก้ไข (UPDATE) และลบข้อมูล (DELETE) ใน MySQL อย่างถูกวิธี พร้อมเทคนิคป้องกันความผิดพลาดที่มือโปรใช้กัน

ทำความเข้าใจการแก้ไขและลบข้อมูลในฐานข้อมูล

เวลาเราสร้างโปรแกรม ข้อมูลที่เก็บไว้ใน MySQL หรือ MariaDB มักจะมีการเปลี่ยนแปลงอยู่เสมอ เช่น ข้อมูลสมาชิกเปลี่ยนเบอร์โทรศัพท์ หรือเราต้องการลบข้อมูลที่ไม่ได้ใช้งานแล้วทิ้งไป การจัดการเหล่านี้ต้องใช้คำสั่ง UPDATE (คำสั่งแก้ไขข้อมูล) และ DELETE (คำสั่งลบข้อมูล) ซึ่งเปรียบเสมือนการใช้ยางลบหรือปากกาแก้คำผิดในสมุดบันทึกของเรานั่นเอง

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

ลองจินตนาการว่าฐานข้อมูลคือตู้เก็บเอกสารที่มีหลายลิ้นชัก ถ้าเราต้องการเปลี่ยนชื่อคนในลิ้นชัก เราต้องระบุให้ชัดเจนว่าคนนั้นอยู่ลิ้นชักไหนและชื่ออะไร หากเราไม่ระบุตำแหน่ง เราอาจเผลอเปลี่ยนชื่อทุกคนในตู้เป็นชื่อเดียวกันหมด ซึ่งนั่นคือหายนะของระบบฐานข้อมูลเลยทีเดียว

การแก้ไขข้อมูลด้วยคำสั่ง UPDATE

คำสั่ง UPDATE ใช้สำหรับปรับปรุงข้อมูลที่มีอยู่แล้วในตาราง (ตารางเก็บข้อมูลที่แบ่งเป็นแถวและคอลัมน์) โดยปกติเราจะใช้คู่กับเงื่อนไขเสมอเพื่อให้ระบบรู้ว่าต้องแก้ที่แถวไหน หากไม่ระบุเงื่อนไข ข้อมูลทุกแถวในตารางนั้นจะถูกเปลี่ยนไปทั้งหมดโดยไม่ตั้งใจ

โครงสร้างของคำสั่งนี้คือการบอกชื่อตาราง ตามด้วยการกำหนดค่าใหม่ในคอลัมน์ที่ต้องการ และปิดท้ายด้วยเงื่อนไข WHERE (คำสั่งระบุเงื่อนไขเพื่อเลือกแถวที่ต้องการ) เสมอ การมีสติทุกครั้งก่อนกดรันคำสั่งเป็นเรื่องที่โปรแกรมเมอร์มืออาชีพต้องฝึกฝน เพราะผลกระทบจากการแก้ข้อมูลผิดพลาดนั้นแก้ไขได้ยากมาก

เรามาดูตัวอย่างการเปลี่ยนที่อยู่อีเมลของสมาชิกในระบบกัน สมมติว่าเรามีตารางชื่อ users และต้องการเปลี่ยนอีเมลของคนที่มี id เป็น 5 ให้เป็นค่าใหม่

-- อัปเดตอีเมลของสมาชิกหมายเลข 5
UPDATE users 
SET email = 'new_email@example.com' 
WHERE id = 5;

คำอธิบายโค้ด: UPDATE users คือการบอกว่าจะแก้ตารางชื่อนี้ SET email = '...' คือการระบุว่าคอลัมน์อีเมลต้องเปลี่ยนเป็นค่าอะไร และ WHERE id = 5 คือการเจาะจงว่าให้แก้เฉพาะแถวที่มีหมายเลข 5 เท่านั้น

ผลลัพธ์: ข้อมูลในตาราง users ที่คอลัมน์ id เป็น 5 จะเปลี่ยนอีเมลเป็น new_email@example.com ทันที ส่วนแถวอื่นจะยังคงเหมือนเดิมทุกประการ

การลบข้อมูลด้วยคำสั่ง DELETE

คำสั่ง DELETE มีหน้าที่ลบแถวข้อมูลออกจากตารางตามเงื่อนไขที่เรากำหนด คล้ายกับการดึงกระดาษออกจากแฟ้มข้อมูล ถ้าเราลืมใส่เงื่อนไข WHERE โปรแกรมจะเข้าใจว่าเราต้องการล้างข้อมูลทั้งหมดในตารางทิ้งทันที ซึ่งเป็นสิ่งที่ไม่มีใครอยากให้เกิดขึ้นแน่นอน

ในการทำงานจริง เรามักจะใช้ DELETE เมื่อข้อมูลนั้นหมดอายุหรือไม่มีความจำเป็นต้องเก็บไว้แล้ว เช่น ลบรายการสั่งซื้อที่ยกเลิกไปนานแล้ว หรือลบรูปโปรไฟล์เก่าของผู้ใช้งาน การเขียนคำสั่งต้องมีความแม่นยำสูงเพื่อให้มั่นใจว่าเรากำลังลบเฉพาะสิ่งที่ไม่ต้องการจริงๆ

มาลองดูตัวอย่างการลบข้อมูลสมาชิกที่ไม่ได้ใช้งานระบบแล้ว โดยเราจะลบข้อมูลของคนที่ id เป็น 10 ออกจากตาราง users

-- ลบข้อมูลสมาชิกหมายเลข 10 ออกจากระบบ
DELETE FROM users 
WHERE id = 10;

คำอธิบายโค้ด: DELETE FROM users คือคำสั่งสั่งให้ลบข้อมูลจากตาราง users และ WHERE id = 10 คือเงื่อนไขที่บอกว่าให้ลบเฉพาะแถวที่มี id เท่ากับ 10 เท่านั้น

ผลลัพธ์: ข้อมูลของสมาชิกหมายเลข 10 จะถูกลบออกไปอย่างถาวรจากฐานข้อมูล ไม่สามารถกู้คืนได้หากไม่มีการสำรองข้อมูล (การคัดลอกข้อมูลไว้ที่อื่นเพื่อป้องกันการสูญหาย) ไว้ก่อนหน้า

ข้อควรระวังเรื่องการลืมใส่เงื่อนไข WHERE

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

วิธีป้องกันที่ดีที่สุดคือการลองรันคำสั่ง SELECT (คำสั่งอ่านข้อมูล) ด้วยเงื่อนไขเดียวกันก่อนเสมอ เพื่อเช็คว่าคำสั่งนั้นไปโดนข้อมูลแถวไหนบ้าง ถ้าข้อมูลที่แสดงออกมาถูกต้องค่อยเปลี่ยน SELECT เป็น UPDATE หรือ DELETE ในภายหลัง

ลองดูตัวอย่างการเช็คข้อมูลก่อนลบจริงกัน สมมติคุณจะลบสมาชิกที่ไม่ได้ใช้งานมานานกว่า 2 ปี

-- เช็คก่อนว่ามีใครเข้าเงื่อนไขบ้าง
SELECT * FROM users WHERE last_login < '2022-01-01';

-- ถ้าผลลัพธ์ที่เห็นถูกต้อง ค่อยรันคำสั่งลบ
DELETE FROM users WHERE last_login < '2022-01-01';

คำอธิบายโค้ด: บรรทัดแรกใช้ SELECT เพื่อดูรายชื่อที่จะถูกลบ บรรทัดที่สองเมื่อเราตรวจสอบรายชื่อจนมั่นใจแล้ว จึงใช้ DELETE เพื่อลบข้อมูลจริงตามเงื่อนไขเดิม

ผลลัพธ์: การตรวจสอบก่อนช่วยให้เราเห็นรายการข้อมูลที่จะหายไป หากรายชื่อที่ปรากฏเกินความคาดหมาย เราจะหยุดและแก้ไขเงื่อนไขได้ทันท่วงที

เทคนิค Safe Update Mode

Safe Update Mode (โหมดป้องกันการแก้ไขข้อมูลผิดพลาด) เป็นฟีเจอร์ของโปรแกรมจัดการฐานข้อมูล เช่น MySQL Workbench ที่ช่วยป้องกันไม่ให้เราเผลออัปเดตหรือลบข้อมูลโดยไม่มีเงื่อนไข WHERE ที่ใช้คอลัมน์ที่เป็นคีย์ (ตัวระบุแถวไม่ซ้ำกัน) ซึ่งจะช่วยลดโอกาสเกิดข้อผิดพลาดได้มหาศาล

หากเราเปิดโหมดนี้ไว้ แล้วพยายามรันคำสั่ง UPDATE หรือ DELETE โดยไม่ใส่ WHERE ที่เจาะจงถึง id โปรแกรมจะปฏิเสธคำสั่งทันทีและแสดงข้อความแจ้งเตือน ทำให้เรามีโอกาสตรวจสอบคำสั่งอีกครั้งก่อนที่จะเกิดความเสียหายกับข้อมูลจริงในระบบ

สำหรับการใช้งานในฐานะมือใหม่ ผมแนะนำให้เปิดฟีเจอร์นี้ทิ้งไว้ตลอดเวลาจนกว่าจะเชี่ยวชาญ เพื่อสร้างนิสัยการเขียนโค้ดที่ปลอดภัยและรอบคอบ ความปลอดภัยของข้อมูลต้องมาก่อนความรวดเร็วในการทำงานเสมอ

-- ตัวอย่างคำสั่งที่อาจถูกปฏิเสธใน Safe Mode
-- เพราะไม่มีการระบุ id ที่เจาะจง
UPDATE users SET status = 'inactive';

คำอธิบายโค้ด: คำสั่งนี้ไม่มี WHERE เพื่อระบุแถว หากเปิด Safe Update Mode ไว้ ระบบจะขึ้นข้อความเตือนว่า "You are using safe update mode" และไม่ยอมรันคำสั่งนี้ให้เรา

ผลลัพธ์: ระบบจะป้องกันไม่ให้ข้อมูลสมาชิกทุกคนถูกเปลี่ยนสถานะเป็น inactive โดยไม่ตั้งใจ ช่วยให้เราได้ย้อนกลับมาตรวจสอบคำสั่งอีกครั้ง

สรุปและแนวทางการนำไปใช้

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

เมื่อคุณต้องทำงานจริง ให้เริ่มจากการฝึกนิสัยตรวจสอบข้อมูลด้วย SELECT ก่อนทุกครั้ง และใช้เครื่องมืออย่าง Safe Update Mode เพื่อช่วยป้องกันความผิดพลาดที่อาจเกิดขึ้นจากการเผลอเรอ หากคุณฝึกฝนจนเป็นนิสัย คุณจะกลายเป็นโปรแกรมเมอร์ที่เขียนโค้ดได้อย่างมั่นใจและมีมาตรฐานสูง

ตัวอย่างการนำไปใช้จริง: ในโปรเจกต์ทำระบบจัดการคลังสินค้า หากคุณต้องลบรายการสินค้าที่หมดสต็อก แทนที่จะเขียน DELETE ทันที ให้เปลี่ยนมาใช้การ UPDATE สถานะสินค้าเป็น 'deleted' แทน เพื่อให้ยังสามารถกู้คืนข้อมูลได้หากเกิดความผิดพลาด นี่คือแนวปฏิบัติที่ดีที่โปรแกรมเมอร์มืออาชีพเขาทำกันครับ

แชร์บทความ

Facebook X LINE

บทความที่เกี่ยวข้อง

MySQL/MariaDB

สอนวิธี Backup และ Restore ฐานข้อมูล MySQL/MariaDB ด้วย mysqldump บน Windows

มือใหม่หัดเขียนโปรแกรมต้องรู้! วิธีสำรองข้อมูล (Backup) และกู้คืน (Restore) ฐานข้อมูลด้วย mysqldump ผ่าน Command Line ป้องกันงานหาย ทำตามได้จริง

1 month ago 9 นาที
23 views
จัดการ User และสิทธิ์ใน MySQL/MariaDB ให้ปลอดภัยด้วยคำสั่ง GRANT และ REVOKE
MySQL/MariaDB

จัดการ User และสิทธิ์ใน MySQL/MariaDB ให้ปลอดภัยด้วยคำสั่ง GRANT และ REVOKE

มือใหม่หัดใช้ฐานข้อมูลต้องรู้! วิธีสร้าง User, กำหนดสิทธิ์ (Permission) และตั้งค่าความปลอดภัยให้ MySQL/MariaDB เพื่อป้องกันข้อมูลรั่วไหลแบบมือโปร

1 month ago 8 นาที
24 views
เข้าใจ MySQL และ MariaDB Trigger: เขียนคำสั่งอัตโนมัติให้ฐานข้อมูลทำงานแทนเรา
MySQL/MariaDB

เข้าใจ MySQL และ MariaDB Trigger: เขียนคำสั่งอัตโนมัติให้ฐานข้อมูลทำงานแทนเรา

อยากให้ฐานข้อมูลทำงานอัตโนมัติเมื่อมีการเพิ่มหรือลบข้อมูลไหม? มาเรียนรู้การใช้ Trigger (ตัวกระตุ้นการทำงาน) ใน MySQL และ MariaDB เพื่อลดภาระงานโค้ดกัน

1 month ago 8 นาที
23 views