MS-SQL

วิธีใช้คำสั่ง UPDATE และ DELETE ใน MS-SQL อย่างปลอดภัยสำหรับมือใหม่

8 นาที 15 views บันทึกเป็น PDF
วิธีใช้คำสั่ง UPDATE และ DELETE ใน MS-SQL อย่างปลอดภัยสำหรับมือใหม่

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

ทำความรู้จัก Update และ Delete ในโลกของฐานข้อมูล

เวลาเราสร้างโปรแกรม ไม่ว่าจะเป็นแอปสั่งอาหารหรือระบบจัดการสต็อกสินค้า ข้อมูลใน MS-SQL (โปรแกรมจัดการฐานข้อมูลของ Microsoft) มักมีการเปลี่ยนแปลงอยู่เสมอ การแก้ไขข้อมูลหรือ UPDATE คือการเปลี่ยนค่าเก่าเป็นค่าใหม่ ส่วนการลบข้อมูลหรือ DELETE คือการเอาข้อมูลที่ไม่ใช้ออกไปจากระบบ

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

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

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

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

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

สมมติว่าเรามีตารางชื่อ Employees (พนักงาน) แล้วเราต้องการเปลี่ยนตำแหน่งงานของพนักงานที่มีรหัสพนักงานเป็น 101 ให้เป็น "Senior Developer" (นักพัฒนาอาวุโส) เราต้องเขียนคำสั่งให้ชัดเจนและเฉพาะเจาะจงที่สุด เพื่อไม่ให้พนักงานคนอื่นโดนเปลี่ยนตำแหน่งไปด้วย

-- เปลี่ยนตำแหน่งงานให้พนักงานรหัส 101
UPDATE Employees
SET Position = 'Senior Developer'
WHERE EmployeeID = 101;

บรรทัดแรก UPDATE Employees คือการบอกว่าเราจะแก้ตารางไหน บรรทัดที่สอง SET Position = 'Senior Developer' คือการกำหนดค่าใหม่ให้คอลัมน์ตำแหน่งงาน บรรทัดที่สาม WHERE EmployeeID = 101 คือการเจาะจงว่าแก้เฉพาะคนที่มีรหัส 101 เท่านั้น

ผลลัพธ์ที่ได้คือ ฐานข้อมูลจะไปค้นหาแถวที่มีรหัส 101 แล้วเปลี่ยนข้อมูลในช่องตำแหน่งงานให้กลายเป็น Senior Developer ทันที ส่วนพนักงานคนอื่นที่มีรหัส 102 หรือ 103 จะไม่ถูกกระทบใดๆ ทั้งสิ้น

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

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

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

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

-- ลบข้อมูลพนักงานรหัส 205 ออกจากระบบ
DELETE FROM Employees
WHERE EmployeeID = 205;

บรรทัดแรก DELETE FROM Employees คือการสั่งให้ลบข้อมูลออกจากตารางพนักงาน บรรทัดที่สอง WHERE EmployeeID = 205 คือการกำหนดเงื่อนไขว่าให้ลบแค่คนที่มีรหัส 205 เท่านั้น ถ้าไม่มีเงื่อนไขนี้ ข้อมูลพนักงานทุกคนจะถูกลบทั้งหมด

ผลลัพธ์คือ ข้อมูลของพนักงานรหัส 205 จะถูกลบออกจากตาราง Employees อย่างถาวร หากเราลองดึงข้อมูลมาดูใหม่ด้วยคำสั่ง SELECT (คำสั่งดึงข้อมูลมาแสดง) เราจะไม่พบรายชื่อของพนักงานคนนี้อีกต่อไป

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

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

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

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

วิธีป้องกันการลบหรือแก้ไขข้อมูลโดยไม่ตั้งใจ

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

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

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

-- ใช้ Transaction เพื่อความปลอดภัย
BEGIN TRANSACTION;

-- ทดลองอัปเดตข้อมูล
UPDATE Employees SET Position = 'Manager' WHERE EmployeeID = 101;

-- ถ้าเช็คแล้วว่าถูกต้องให้สั่ง Commit
-- COMMIT;

-- ถ้าผิดพลาดให้สั่ง Rollback เพื่อย้อนคืน
ROLLBACK;

BEGIN TRANSACTION เริ่มต้นการทำงานเป็นกลุ่ม UPDATE คือการรันคำสั่งแก้ไขข้อมูล COMMIT คือการบันทึกการเปลี่ยนแปลงถาวร ROLLBACK คือการยกเลิกการเปลี่ยนแปลงทั้งหมดที่ทำมาตั้งแต่นับ BEGIN

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

สรุป: ฝึกฝนให้เป็นนิสัยก่อนลงมือจริง

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

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

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

แชร์บทความ

Facebook X LINE

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

คู่มือ MS-SQL Backup, Restore และการตั้งค่า Maintenance Plans สำหรับมือใหม่
MS-SQL

คู่มือ MS-SQL Backup, Restore และการตั้งค่า Maintenance Plans สำหรับมือใหม่

เรียนรู้วิธีสำรองข้อมูล (Backup) และกู้คืน (Restore) ฐานข้อมูล MS-SQL ด้วย SSMS พร้อมวิธีตั้งค่าระบบอัตโนมัติ เพื่อป้องกันข้อมูลหายสำหรับโปรแกรมเมอร์มือใหม่

3 weeks ago 7 นาที
14 views
คู่มือการจัดการความปลอดภัยใน MS-SQL: Logins, Users และการคุมสิทธิ์ด้วย GRANT, DENY, REVOKE
MS-SQL

คู่มือการจัดการความปลอดภัยใน MS-SQL: Logins, Users และการคุมสิทธิ์ด้วย GRANT, DENY, REVOKE

ไม่อยากให้ฐานข้อมูลถูกแฮกต้องอ่าน! เรียนรู้วิธีตั้งค่าความปลอดภัยใน MS-SQL ตั้งแต่การสร้าง Login (บัญชีผู้ใช้) ไปจนถึงการคุมสิทธิ์เข้าถึงข้อมูลให้ปลอดภัย

3 weeks ago 9 นาที
15 views
เจาะลึก MS-SQL Trigger (AFTER & INSTEAD OF) พร้อมวิธีจัดการ Error ด้วย TRY...CATCH
MS-SQL

เจาะลึก MS-SQL Trigger (AFTER & INSTEAD OF) พร้อมวิธีจัดการ Error ด้วย TRY...CATCH

เรียนรู้การใช้ Trigger ใน MS-SQL เพื่อจัดการข้อมูลอัตโนมัติ พร้อมเทคนิคการเขียน Error Handling ให้ระบบเสถียร ไม่พังง่าย เหมาะสำหรับมือใหม่หัดเขียนฐานข้อมูล

3 weeks ago 9 นาที
15 views