EP07: Workshop2: การเพิ่ม ลบ และแก้ไขข้อมูลด้วย DML

ส่วนที่ 1: การเพิ่ม ลบ และแก้ไขข้อมูลด้วย DML

คำสั่ง INSERT INTO: การเพิ่มข้อมูลใหม่

  • วัตถุประสงค์: ใช้สำหรับเพิ่มแถวข้อมูล (Record) ใหม่เข้าไปในตาราง
  • รูปแบบที่ 1 (ระบุชื่อคอลัมน์ – แนะนำให้ใช้):SQLINSERT INTO ชื่อตาราง (คอลัมน์1, คอลัมน์2, ...) VALUES (ค่าข้อมูล1, ค่าข้อมูล2, ...);
    • ข้อดี: ปลอดภัย แม้ลำดับคอลัมน์ในตารางจริงจะเปลี่ยนไปในอนาคต โค้ดก็ยังทำงานถูกต้อง
  • รูปแบบที่ 2 (ไม่ระบุชื่อคอลัมน์ – สำหรับความรวดเร็ว):SQLINSERT INTO ชื่อตาราง VALUES (ค่าข้อมูล1, ค่าข้อมูล2, ...);
    • ข้อควรระวัง: ต้องใส่ค่าข้อมูลให้ ครบทุกคอลัมน์ และต้อง เรียงตามลำดับ ของคอลัมน์ในตารางจริงเป๊ะๆ
  • ตัวอย่าง: การเพิ่มข้อมูลพนักงานใหม่เข้าสู่ระบบ

คำสั่ง UPDATE: การแก้ไขข้อมูลเดิม

  • วัตถุประสงค์: ใช้สำหรับแก้ไขค่าในคอลัมน์ของแถวข้อมูลที่มีอยู่แล้ว
  • รูปแบบคำสั่ง:SQLUPDATE ชื่อตาราง SET คอลัมน์1 = ค่าใหม่1, คอลัมน์2 = ค่าใหม่2, ... WHERE เงื่อนไข;
  • หัวใจสำคัญ: The WHERE Clause
    • WHERE คือ “เข็มขัดนิรภัย” ของคุณ มันทำหน้าที่ระบุว่าจะแก้ไข แถวไหน
    • คำเตือนที่ต้องย้ำ:ถ้าลืม WHERE จะเกิดอะไรขึ้น?
      • ต้องเน้นย้ำอย่างจริงจังว่า “คำสั่ง UPDATE จะถูกกระทำกับข้อมูลทุกแถวในตารางนั้น!”
      • ยกตัวอย่างที่น่ากลัว: UPDATE employees SET position = 'นักศึกษาฝึกงาน'; (พนักงานทุกคนในบริษัทจะถูกเปลี่ยนตำแหน่งเป็นนักศึกษาฝึกงานทันที)
  • ตัวอย่าง: การเปลี่ยนสถานะใบแจ้งซ่อมจาก ‘แจ้งซ่อม’ เป็น ‘กำลังดำเนินการ’

คำสั่ง DELETE FROM: การลบข้อมูล

  • วัตถุประสงค์: ใช้สำหรับลบแถวข้อมูลทั้งแถวออกจากตาราง
  • รูปแบบคำสั่ง:SQLDELETE FROM ชื่อตาราง WHERE เงื่อนไข;
  • หัวใจสำคัญและคำเตือนที่อันตรายที่สุด:
    • ย้ำอีกครั้งถึงความสำคัญของ WHERE clause
    • คำเตือนขั้นสูงสุด: ถ้า UPDATE โดยไม่มี WHERE ว่าแย่แล้ว DELETE โดยไม่มี WHERE คือหายนะ!
    • “มันจะลบข้อมูลทั้งหมดออกจากตารางทันที ไม่มีการถามซ้ำ และส่วนใหญ่กู้คืนไม่ได้!”
  • ตัวอย่าง: การลบใบแจ้งซ่อมที่สร้างขึ้นมาผิดพลาด

สรุปและปูทางสู่ภาคปฏิบัติ

  • ทบทวน 3 คำสั่ง: INSERT (เพิ่ม), UPDATE (แก้), DELETE (ลบ)
  • ท่องกฎทอง: “Always use WHERE with UPDATE and DELETE (ใช้ WHERE กับ UPDATE และ DELETE เสมอ)

ส่วนที่ 2: การฝึกปฏิบัติ

หัวข้อ: Workshop: จำลองการทำงาน 1 วันในโรงงานด้วย SQL-DML

เครื่องมือ: เชื่อมต่อกับฐานข้อมูล

เตรียมความพร้อมและทบทวนข้อมูลปัจจุบัน

  1. ให้นักศึกษาทุกคนรันคำสั่ง SELECT * FROM ...; เพื่อดูข้อมูลล่าสุดในตารางทั้ง 3 (employees, machines, maintenance_tickets)
  2. อาจารย์แจ้งสถานการณ์จำลองของวันนี้: “วันนี้เป็นวันศุกร์ที่ 27 มิถุนายน 2568 มีหลายเหตุการณ์เกิดขึ้นในโรงงาน ให้ทุกคนช่วยกันอัปเดตฐานข้อมูลให้เป็นปัจจุบัน”

ส่วนที่ 1: การเพิ่มข้อมูลใหม่ (INSERT Practice)

  • สถานการณ์ที่ 1: รับพนักงานใหม่
    • ภารกิจ: เพิ่มข้อมูลพนักงานชื่อ ‘มานะ ใจดี’ ตำแหน่ง ‘ช่างเทคนิค’ รหัสพนักงาน 103
    • ให้นักศึกษาเขียน:
SQL
INSERT INTO employees (employee_id, full_name, position) VALUES (103, 'มานะ ใจดี', 'ช่างเทคนิค');

ตรวจสอบ: SELECT * FROM employees; เพื่อดูว่ามีพนักงานใหม่เพิ่มเข้ามาแล้ว

  • สถานการณ์ที่ 2: ติดตั้งเครื่องจักรใหม่
    • ภารกิจ: เพิ่มเครื่องจักร ‘Welding Robot’ รุ่น ‘Fanuc ArcMate 100iC’ ที่ตำแหน่ง ‘Line C’ รหัสเครื่องจักร 3
    • ให้นักศึกษาเขียน:
SQL
INSERT INTO machines (machine_id, machine_name, model, location) VALUES (3, 'Welding Robot', 'Fanuc ArcMate 100iC', 'Line C');

ตรวจสอบ: SELECT * FROM machines;

  • สถานการณ์ที่ 3: พนักงานใหม่แจ้งซ่อม
    • ภารกิจ: ‘มานะ ใจดี’ (รหัส 103) พบว่าเครื่องจักรใหม่ (รหัส 3) มีปัญหา ‘Calibration Error’ ให้สร้างใบแจ้งซ่อมใหม่ รหัส 202403 ณ วันที่และเวลาปัจจุบัน
    • ให้นักศึกษาเขียน:
SQL
INSERT INTO maintenance_tickets (ticket_id, report_date, problem_description, status, machine_id_fk, employee_id_fk) VALUES (202403, '2025-06-27 10:00:00', 'Calibration Error', 'แจ้งซ่อม', 3, 103)

ตรวจสอบ: SELECT * FROM maintenance_tickets;

ส่วนที่ 2: การอัปเดตสถานะและแก้ไขข้อมูล (UPDATE Practice)

  • สถานการณ์ที่ 4: เริ่มดำเนินการซ่อม
    • ภารกิจ: ปัญหาของเครื่อง ‘CNC Lathe Machine 01’ (รหัสใบแจ้งซ่อม 202401) ได้เริ่มดำเนินการซ่อมแล้ว ให้เปลี่ยนสถานะ (status) เป็น ‘กำลังดำเนินการ’
    • ให้นักศึกษาเขียน:
SQL
UPDATE maintenance_tickets SET status = 'กำลังดำเนินการ' WHERE ticket_id = 202401;

ตรวจสอบ: SELECT * FROM maintenance_tickets WHERE ticket_id = 202401;

  • สถานการณ์ที่ 5: ซ่อมเสร็จสิ้น
    • ภารกิจ: ปัญหา ‘ระบบไฮดรอลิกรั่ว’ ของเครื่องจักรหมายเลข 2 (รหัสใบแจ้งซ่อม 202402) ได้รับการแก้ไขเรียบร้อยแล้ว ให้เปลี่ยนสถานะเป็น ‘ซ่อมเสร็จสิ้น’
    • ให้นักศึกษาเขียน:
SQL
UPDATE maintenance_tickets SET status = 'ซ่อมเสร็จสิ้น' WHERE ticket_id = 202402;

ตรวจสอบ: SELECT * FROM maintenance_tickets WHERE ticket_id = 202402;

ส่วนที่ 3: การลบข้อมูลที่ผิดพลาด (DELETE Practice)

  • สถานการณ์ที่ 6: สร้างใบแจ้งซ่อมซ้ำซ้อน
    • ภารกิจ: สมมติว่ามีการแจ้งซ่อมผิดพลาด ให้เราสร้างข้อมูลผิดพลาดขึ้นมาก่อน
SQL
INSERT INTO maintenance_tickets (ticket_id, report_date, problem_description, status, machine_id_fk, employee_id_fk) VALUES (999, '2025-06-27 11:00:00', 'Test Delete - ข้อมูลซ้ำซ้อน', 'ผิดพลาด', 1, 101);

ตรวจสอบ: SELECT * FROM maintenance_tickets WHERE ticket_id = 999;

  • ภารกิจหลัก: ให้ลบใบแจ้งซ่อมรหัส 999 ที่สร้างผิดพลาดนี้ทิ้งไป
  • ให้นักศึกษาเขียน:
SQL
DELETE FROM maintenance_tickets WHERE ticket_id = 999;

ตรวจสอบ: SELECT * FROM maintenance_tickets; (จะพบว่าใบแจ้งซ่อมรหัส 999 หายไปแล้ว)