EP07: Workshop2: การเพิ่ม ลบ และแก้ไขข้อมูลด้วย DML
ส่วนที่ 1: การเพิ่ม ลบ และแก้ไขข้อมูลด้วย DML
คำสั่ง INSERT INTO
: การเพิ่มข้อมูลใหม่
- วัตถุประสงค์: ใช้สำหรับเพิ่มแถวข้อมูล (Record) ใหม่เข้าไปในตาราง
- รูปแบบที่ 1 (ระบุชื่อคอลัมน์ – แนะนำให้ใช้):SQL
INSERT INTO ชื่อตาราง (คอลัมน์1, คอลัมน์2, ...) VALUES (ค่าข้อมูล1, ค่าข้อมูล2, ...);
- ข้อดี: ปลอดภัย แม้ลำดับคอลัมน์ในตารางจริงจะเปลี่ยนไปในอนาคต โค้ดก็ยังทำงานถูกต้อง
- รูปแบบที่ 2 (ไม่ระบุชื่อคอลัมน์ – สำหรับความรวดเร็ว):SQL
INSERT INTO ชื่อตาราง VALUES (ค่าข้อมูล1, ค่าข้อมูล2, ...);
- ข้อควรระวัง: ต้องใส่ค่าข้อมูลให้ ครบทุกคอลัมน์ และต้อง เรียงตามลำดับ ของคอลัมน์ในตารางจริงเป๊ะๆ
- ตัวอย่าง: การเพิ่มข้อมูลพนักงานใหม่เข้าสู่ระบบ
คำสั่ง UPDATE
: การแก้ไขข้อมูลเดิม
- วัตถุประสงค์: ใช้สำหรับแก้ไขค่าในคอลัมน์ของแถวข้อมูลที่มีอยู่แล้ว
- รูปแบบคำสั่ง:SQL
UPDATE ชื่อตาราง SET คอลัมน์1 = ค่าใหม่1, คอลัมน์2 = ค่าใหม่2, ... WHERE เงื่อนไข;
- หัวใจสำคัญ: The
WHERE
Clause
WHERE
คือ “เข็มขัดนิรภัย” ของคุณ มันทำหน้าที่ระบุว่าจะแก้ไข แถวไหน
- คำเตือนที่ต้องย้ำ:ถ้าลืม
WHERE
จะเกิดอะไรขึ้น?
- ต้องเน้นย้ำอย่างจริงจังว่า “คำสั่ง
UPDATE
จะถูกกระทำกับข้อมูลทุกแถวในตารางนั้น!”
- ยกตัวอย่างที่น่ากลัว:
UPDATE employees SET position = 'นักศึกษาฝึกงาน';
(พนักงานทุกคนในบริษัทจะถูกเปลี่ยนตำแหน่งเป็นนักศึกษาฝึกงานทันที)
- ตัวอย่าง: การเปลี่ยนสถานะใบแจ้งซ่อมจาก ‘แจ้งซ่อม’ เป็น ‘กำลังดำเนินการ’
คำสั่ง DELETE FROM
: การลบข้อมูล
- วัตถุประสงค์: ใช้สำหรับลบแถวข้อมูลทั้งแถวออกจากตาราง
- รูปแบบคำสั่ง:SQL
DELETE 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
เครื่องมือ: เชื่อมต่อกับฐานข้อมูล
เตรียมความพร้อมและทบทวนข้อมูลปัจจุบัน
- ให้นักศึกษาทุกคนรันคำสั่ง
SELECT * FROM ...;
เพื่อดูข้อมูลล่าสุดในตารางทั้ง 3 (employees
, machines
, maintenance_tickets
)
- อาจารย์แจ้งสถานการณ์จำลองของวันนี้: “วันนี้เป็นวันศุกร์ที่ 27 มิถุนายน 2568 มีหลายเหตุการณ์เกิดขึ้นในโรงงาน ให้ทุกคนช่วยกันอัปเดตฐานข้อมูลให้เป็นปัจจุบัน”
ส่วนที่ 1: การเพิ่มข้อมูลใหม่ (INSERT
Practice)
- สถานการณ์ที่ 1: รับพนักงานใหม่
- ภารกิจ: เพิ่มข้อมูลพนักงานชื่อ ‘มานะ ใจดี’ ตำแหน่ง ‘ช่างเทคนิค’ รหัสพนักงาน
103
- ให้นักศึกษาเขียน:
SQLINSERT INTO employees (employee_id, full_name, position) VALUES (103, 'มานะ ใจดี', 'ช่างเทคนิค');
ตรวจสอบ: SELECT * FROM employees;
เพื่อดูว่ามีพนักงานใหม่เพิ่มเข้ามาแล้ว
- สถานการณ์ที่ 2: ติดตั้งเครื่องจักรใหม่
- ภารกิจ: เพิ่มเครื่องจักร ‘Welding Robot’ รุ่น ‘Fanuc ArcMate 100iC’ ที่ตำแหน่ง ‘Line C’ รหัสเครื่องจักร
3
- ให้นักศึกษาเขียน:
SQLINSERT 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
ณ วันที่และเวลาปัจจุบัน
- ให้นักศึกษาเขียน:
SQLINSERT 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) เป็น ‘กำลังดำเนินการ’
- ให้นักศึกษาเขียน:
SQLUPDATE maintenance_tickets SET status = 'กำลังดำเนินการ' WHERE ticket_id = 202401;
ตรวจสอบ: SELECT * FROM maintenance_tickets WHERE ticket_id = 202401;
- สถานการณ์ที่ 5: ซ่อมเสร็จสิ้น
- ภารกิจ: ปัญหา ‘ระบบไฮดรอลิกรั่ว’ ของเครื่องจักรหมายเลข 2 (รหัสใบแจ้งซ่อม
202402
) ได้รับการแก้ไขเรียบร้อยแล้ว ให้เปลี่ยนสถานะเป็น ‘ซ่อมเสร็จสิ้น’
- ให้นักศึกษาเขียน:
SQLUPDATE maintenance_tickets SET status = 'ซ่อมเสร็จสิ้น' WHERE ticket_id = 202402;
ตรวจสอบ: SELECT * FROM maintenance_tickets WHERE ticket_id = 202402;
ส่วนที่ 3: การลบข้อมูลที่ผิดพลาด (DELETE
Practice)
- สถานการณ์ที่ 6: สร้างใบแจ้งซ่อมซ้ำซ้อน
- ภารกิจ: สมมติว่ามีการแจ้งซ่อมผิดพลาด ให้เราสร้างข้อมูลผิดพลาดขึ้นมาก่อน
SQLINSERT 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
ที่สร้างผิดพลาดนี้ทิ้งไป
- ให้นักศึกษาเขียน:
SQLDELETE FROM maintenance_tickets WHERE ticket_id = 999;
ตรวจสอบ: SELECT * FROM maintenance_tickets;
(จะพบว่าใบแจ้งซ่อมรหัส 999 หายไปแล้ว)