🔵 PostgreSQL

เทคนิค PostgreSQL: ใช้ RETURNING เพื่อดูข้อมูลทันทีหลัง UPDATE และ DELETE

7 นาที 16 views บันทึกเป็น PDF
เทคนิค PostgreSQL: ใช้ RETURNING เพื่อดูข้อมูลทันทีหลัง UPDATE และ DELETE

เบื่อไหมที่ต้องสั่ง SELECT ซ้ำหลังอัปเดตข้อมูล? มาเรียนรู้วิธีใช้ RETURNING ใน PostgreSQL เพื่อดึงข้อมูลที่เพิ่งแก้ไขหรือลบออกมาดูได้ทันที ช่วยให้โค้ดสะอาดและทำงานไวขึ้น

ทำไมเราต้องใช้ RETURNING ในการจัดการข้อมูล

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

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

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

พื้นฐานการแก้ไขข้อมูลด้วย UPDATE

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

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

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

-- แก้ไขชื่อผู้ใช้ที่มี id เป็น 1
UPDATE users 
SET name = 'Somchai' 
WHERE id = 1;

บรรทัดแรก UPDATE users คือการบอกว่าเราจะแก้ตารางไหน บรรทัดสอง SET name = 'Somchai' คือการกำหนดค่าใหม่ให้คอลัมน์ชื่อ บรรทัดสุดท้าย WHERE id = 1 คือการบอกว่าแก้แค่แถวที่มีไอดีเป็น 1 เท่านั้น

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

ใช้ RETURNING เพื่อดูข้อมูลหลัง UPDATE

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

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

ลองดูตัวอย่างการใช้คำสั่งนี้ร่วมกันดูครับ เราจะเปลี่ยนคะแนนและดึงค่าที่เปลี่ยนออกมาแสดงทันที

-- อัปเดตคะแนนและดูผลลัพธ์ทันที
UPDATE students 
SET score = 95 
WHERE id = 10 
RETURNING id, name, score;

บรรทัด RETURNING id, name, score คือส่วนสำคัญที่สั่งให้ระบบส่งค่าของคอลัมน์เหล่านั้นกลับมาให้เราดูหลังจากอัปเดตเสร็จแล้ว ทำให้เราได้ข้อมูลที่อัปเดตล่าสุดมาใช้งานในโปรแกรมได้ทันที

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

การลบข้อมูลด้วย DELETE ร่วมกับ RETURNING

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

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

มาดูตัวอย่างการลบข้อมูลที่ใช้งานจริงกันครับ

-- ลบข้อมูลและดูว่ารายการที่ลบไปคืออะไร
DELETE FROM orders 
WHERE id = 50 
RETURNING id, product_name, amount;

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

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

จุดที่มือใหม่มักพลาดและวิธีแก้ไข

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

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

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

สรุป: การนำไปใช้จริงในงานโปรแกรมเมอร์

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

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

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

แชร์บทความ

Facebook X LINE

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

จัดการ PostgreSQL เบื้องต้น: การคุมสิทธิ์ User, การ Backup และ Restore ข้อมูลบน Windows
PostgreSQL

จัดการ PostgreSQL เบื้องต้น: การคุมสิทธิ์ User, การ Backup และ Restore ข้อมูลบน Windows

มือใหม่ต้องรู้! วิธีจัดการสิทธิ์ผู้ใช้งาน (Role) และการสำรองข้อมูล (Backup) ใน PostgreSQL ให้ปลอดภัย พร้อมวิธี Restore ข้อมูลกลับมาใช้ได้จริงผ่าน Command Line

4 weeks ago 8 นาที
25 views
เจาะลึก PostgreSQL Triggers: วิธีเขียนคำสั่งทำงานอัตโนมัติเมื่อข้อมูลเปลี่ยน
PostgreSQL

เจาะลึก PostgreSQL Triggers: วิธีเขียนคำสั่งทำงานอัตโนมัติเมื่อข้อมูลเปลี่ยน

อยากให้ฐานข้อมูลทำงานอัตโนมัติเมื่อมีการเพิ่มหรือแก้ไขข้อมูลไหม? มาเรียนรู้การใช้ PostgreSQL Triggers (ตัวสั่งการอัตโนมัติ) ทั้ง BEFORE และ AFTER เพื่อลดงานซ้ำซ้อน

4 weeks ago 8 นาที
19 views
เจาะลึก PostgreSQL PL/pgSQL: เขียนฟังก์ชันและ Stored Procedures ฉบับมือใหม่
PostgreSQL

เจาะลึก PostgreSQL PL/pgSQL: เขียนฟังก์ชันและ Stored Procedures ฉบับมือใหม่

เรียนรู้วิธีเขียนโปรแกรมในฐานข้อมูลด้วย PL/pgSQL ทั้งการสร้างฟังก์ชัน การใช้ตัวแปร และการทำ Loop เพื่อให้งานจัดการข้อมูลของคุณเร็วและเป็นระเบียบยิ่งขึ้น

4 weeks ago 8 นาที
18 views