ให้ Claude เขียน SQL และตรวจคำสั่งฐานข้อมูลอย่างไร? พร้อมข้อควรระวัง

Claude ช่วยร่าง SQL อธิบายคำสั่ง และตรวจสอบเงื่อนไขเบื้องต้นได้ แต่ก่อนรันกับฐานข้อมูลจริง ควรตรวจว่าคำสั่งตรงกับโครงสร้างตารางและระบบฐานข้อมูลที่ใช้อยู่หรือไม่ ผู้ใช้ ComSiam ควรเริ่มด้วยการส่ง schema ตัวอย่างที่ไม่มีข้อมูลลับ ระบุเป้าหมาย และขอให้ Claude อธิบายผลกระทบของคำสั่งก่อนนำไปรัน

SQL ของแต่ละระบบอาจมีรูปแบบต่างกัน เช่น MySQL, PostgreSQL และ SQL Server จึงควรระบุระบบและเวอร์ชันเมื่อทราบ โดยเฉพาะคำสั่งที่ใช้ฟังก์ชันเฉพาะหรือแก้ไขข้อมูล

ข้อมูลที่ควรให้ Claude ก่อนเขียน SQL

① ระบบฐานข้อมูล — เช่น MySQL หรือ PostgreSQL
② โครงสร้างตาราง — ชื่อตาราง คอลัมน์ ชนิดข้อมูล และความสัมพันธ์ที่เกี่ยวข้อง
③ เป้าหมายของคำสั่ง — เช่น ต้องการค้นหา สรุป เพิ่ม หรือแก้ไขข้อมูล
④ เงื่อนไขและตัวอย่างผลลัพธ์ — ระบุแถวที่ต้องการและคอลัมน์ที่อยากได้
⑤ ข้อจำกัด — เช่น ห้ามแก้ไขข้อมูล หรือให้แสดงเฉพาะคำสั่งอ่านข้อมูล
⑥ ข้อมูลตัวอย่างที่ไม่ใช่ข้อมูลจริง — ใช้ตรวจแนวคิดโดยไม่เปิดเผยข้อมูลส่วนตัว

ไม่ควรส่งรหัสผ่าน ข้อมูลลูกค้า หรือข้อมูลสำคัญของฐานข้อมูลให้ Claude หากต้องยกตัวอย่าง ให้ใช้ schema และข้อมูลสมมติแทน

Prompt สำหรับให้ Claude เขียน SQL

ช่วยเขียน SQL สำหรับ MySQL [ระบุเวอร์ชันถ้าทราบ]

เป้าหมาย:
นับจำนวนสินค้าแยกตามหมวดหมู่ เฉพาะสินค้าที่เปิดใช้งาน
เรียงหมวดหมู่ที่มีสินค้ามากที่สุดไว้ก่อน

โครงสร้างตาราง:
products
- id: จำนวนเต็ม
- category: ข้อความ
- price: ตัวเลข
- is_active: ค่าระบุสถานะสินค้า

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

ตัวอย่าง SQL ที่อาจได้:

SELECT
    category,
    COUNT(*) AS product_count
FROM products
WHERE is_active = 1
GROUP BY category
ORDER BY product_count DESC;

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

วิธีให้ Claude ตรวจ SQL ที่มีอยู่

① วางคำสั่ง SQL และบอกระบบฐานข้อมูลที่ใช้
② แนบ schema เฉพาะตารางที่เกี่ยวข้อง
③ อธิบายว่าคำสั่งควรคืนผลลัพธ์หรือเปลี่ยนข้อมูลอย่างไร
④ ขอให้ตรวจเงื่อนไข JOIN, WHERE, GROUP BY และการจัดการค่าว่างตามที่เกี่ยวข้อง
⑤ ขอให้แยกข้อผิดพลาดที่ยืนยันได้ออกจากข้อสมมติ
⑥ หากคำสั่งเปลี่ยนข้อมูล ให้ขอให้ Claude อธิบายจำนวนแถวและผลกระทบก่อน

ตัวอย่าง Prompt สำหรับตรวจคำสั่ง:

ช่วยตรวจ SQL นี้สำหรับ PostgreSQL

เป้าหมาย:
[อธิบายผลลัพธ์ที่ต้องการ]

Schema ที่เกี่ยวข้อง:
[วางโครงสร้างตารางที่ไม่มีข้อมูลลับ]

คำสั่ง:
[วาง SQL]

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

ข้อควรระวังก่อนรันคำสั่งที่แก้ไขข้อมูล

ตรวจ WHERE ในคำสั่ง UPDATE และ DELETE

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

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

ระบุการใช้ Parameterized Query เมื่อนำค่าจากผู้ใช้มาใส่

ถ้าสร้าง SQL ในโปรแกรมจากค่าที่ผู้ใช้กรอก ควรขอให้ Claude ใช้ parameterized query หรือ prepared statement ตามไลบรารีที่เชื่อมต่อฐานข้อมูล ไม่ควรนำค่าจากผู้ใช้มาต่อเป็นข้อความ SQL โดยตรง เพราะอาจเสี่ยงต่อ SQL injection วิธีใช้ placeholder แตกต่างกันตามไดรเวอร์ จึงต้องระบุภาษาที่ใช้และไลบรารีด้วย

เข้าใจขอบเขตของ Transaction

Transaction ช่วยจัดกลุ่มการเปลี่ยนแปลง เพื่อให้ยืนยันหรือย้อนกลับได้ในระบบที่รองรับและตั้งค่าเหมาะสม แต่รายละเอียดการทำงานขึ้นอยู่กับฐานข้อมูลและเครื่องมือที่ใช้ เอกสาร PostgreSQL อธิบายการใช้ BEGIN, COMMIT และ ROLLBACK สำหรับควบคุม transaction ควรตรวจเอกสารของระบบจริงก่อนใช้กับงานสำคัญ

ใช้สิทธิ์เท่าที่จำเป็น

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

ขั้นตอนตรวจสอบก่อนนำ SQL ไปใช้จริง

① ตรวจชื่อฐานข้อมูล ตาราง และคอลัมน์ให้ตรงกับ schema
② อ่านคำสั่งและเงื่อนไขทุกส่วนด้วยตนเอง
③ เริ่มจากคำสั่งอ่านข้อมูลหรือข้อมูลทดสอบ
④ ตรวจจำนวนแถวที่ตรงเงื่อนไขก่อนใช้ UPDATE หรือ DELETE
⑤ ทดลองในฐานข้อมูลทดสอบหรือสำเนาข้อมูลก่อน
⑥ สำรองข้อมูลตามกระบวนการของระบบก่อนการเปลี่ยนแปลงสำคัญ
⑦ ตรวจผลหลังรันและบันทึกสิ่งที่เปลี่ยนแปลง

คำถามที่พบบ่อย

Claude เขียน SQL ได้ทุกระบบฐานข้อมูลหรือไม่

Claude ช่วยร่าง SQL ได้หลายระบบ แต่ไวยากรณ์ ฟังก์ชัน และรายละเอียดอาจต่างกัน ควรระบุระบบฐานข้อมูลและเวอร์ชันเพื่อให้คำตอบตรงกับสภาพแวดล้อม

ส่งข้อมูลจริงจากฐานข้อมูลให้ Claude ตรวจได้ไหม

ควรหลีกเลี่ยงข้อมูลส่วนบุคคล ข้อมูลลูกค้า รหัสผ่าน และข้อมูลลับ ให้ส่งเฉพาะ schema หรือข้อมูลตัวอย่างที่ลบรายละเอียดระบุตัวบุคคลแล้ว

เชื่อ SQL ที่ Claude เขียนได้ทันทีหรือไม่

ไม่ควรรันทันที ควรตรวจ schema เงื่อนไข และผลกระทบก่อน โดยเฉพาะคำสั่ง UPDATE, DELETE, DROP หรือคำสั่งที่เปลี่ยนโครงสร้างฐานข้อมูล

จะใช้ Claude ช่วยตรวจ SQL ที่ซับซ้อนได้อย่างไร

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

สรุป

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