PostgreSQL ลบแถวจากรายการที่เลือก

⚡ สรุปอย่างชาญฉลาด

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

  • 📋 ไวยากรณ์: คำสั่ง DELETE FROM table WHERE condition จะลบแถวที่ตรงกับเงื่อนไข และคำสั่ง RETURNING สามารถแสดงข้อมูลที่ถูกลบได้
  • 🎯 เงื่อนไขข้อเดียว: เงื่อนไข WHERE เดียวจะลบเฉพาะแถวที่ตรงตามเงื่อนไขข้อเดียวเท่านั้น
  • สองเงื่อนไข: การเชื่อมการทดสอบสองครั้งด้วยคำว่า AND จะจำกัดการลบให้เหลือเฉพาะแถวที่ต้องการเท่านั้น
  • 🔗 เงื่อนไขที่มีอยู่: คำสั่ง EXISTS จะลบแถวในตารางหนึ่งโดยอิงจากข้อมูลที่ตรงกันในอีกตารางหนึ่ง
  • 🖥️ pgAdmin: สามารถเรียกใช้คำสั่งลบข้อมูลเดียวกันได้ผ่านทางตัวแก้ไขคำสั่งของ pgAdmin
  • 🤖 ความปลอดภัย AI: ผู้ช่วย AI จะเพิ่มเงื่อนไข WHERE ที่ถูกต้องและแจ้งเตือนก่อนทำการลบข้อมูลทั้งตาราง

PostgreSQL ลบแถวจากรายการที่เลือก

ลบแบบสอบถามใน PostgreSQL

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

PostgreSQL ไวยากรณ์คำสั่งลบ

คำสั่ง DELETE สามารถกำหนดได้โดยใช้ไวยากรณ์ด้านล่างนี้:

[ WITH [ RECURSIVE ] with-query [, ...] ]
DELETE FROM [ ONLY ] table-name [ * ] [ [ AS ] alias ]
    [ USING using-list ]
    [ WHERE condition(s) | WHERE CURRENT OF cursor-name]
    [ RETURNING * | output-expression [ [ AS ] output-name] [, ...] ]

พารามิเตอร์

พารามิเตอร์ต่อไปนี้สามารถใช้งานได้:

  • ด้วยแบบสอบถาม: คำสั่ง WITH ช่วยให้คุณสามารถอ้างอิงถึงซับเควรีตั้งแต่หนึ่งรายการขึ้นไปโดยใช้ชื่อภายในคำสั่ง DELETE ได้
  • ชื่อตาราง: ชื่อของตารางที่ต้องการลบเรคคอร์ด
  • นามแฝง: ตัวเลือกทดแทนสำหรับชื่อของตารางเป้าหมาย
  • รายการใช้งาน: นิพจน์ตารางที่อนุญาตให้ใช้คอลัมน์จากตารางอื่นในส่วน WHERE ของเงื่อนไข
  • เงื่อนไข): ไม่บังคับ นี่คือเงื่อนไขที่ต้องเป็นไปตามนั้นสำหรับการลบข้อมูล หากไม่ได้ระบุส่วนนี้ ข้อมูลทั้งหมดในตารางชื่อนั้นจะถูกลบ
  • ชื่อเคอร์เซอร์: เคอร์เซอร์ที่จะใช้ในเงื่อนไข WHERE CURRENT OF แถวสุดท้ายที่ดึงมาโดยเคอร์เซอร์นี้จะถูกลบออก
  • เอาท์พุทแสดงออก: นิพจน์ที่จะถูกประมวลผลและส่งกลับโดยคำสั่ง DELETE หลังจากลบแต่ละแถวเสร็จสิ้น
  • ชื่อเอาต์พุต: ชื่อที่จะใช้สำหรับคอลัมน์ที่ส่งคืน

โปรดทราบว่าเนื่องจากคำสั่ง DELETE จะลบทั้งแถว คุณจึงไม่จำเป็นต้องระบุชื่อคอลัมน์

PostgreSQL ลบแบบสอบถามที่มีเงื่อนไขเดียว

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

ราคา:

PostgreSQL ลบแบบสอบถามที่มีเงื่อนไขเดียว

ให้เราลบบันทึกด้วยรหัส 4:

DELETE FROM Price
WHERE id = 4;

คำสั่งข้างต้นจะลบข้อมูลที่มีรหัสประจำตัวเป็น 4 เรามาตรวจสอบว่าการลบสำเร็จหรือไม่:

PostgreSQL ลบแบบสอบถามที่มีเงื่อนไขเดียว

ลบแถวที่มีรหัส 4 แล้ว

ลบแบบสอบถามที่มีสองเงื่อนไข

การขอ PostgreSQL คำสั่ง DELETE สามารถรับเงื่อนไขได้สองเงื่อนไข โดยต้องเชื่อมเงื่อนไขทั้งสองเข้าด้วยกันโดยใช้ตัวดำเนินการ AND เราจะใช้ตารางต่อไปนี้เป็นตัวอย่าง:

ราคา:

PostgreSQL ลบแบบสอบถามที่มีสองเงื่อนไข

ลองพิจารณาตัวอย่างที่ให้ไว้ด้านล่าง:

DELETE FROM Price
WHERE id = 3
AND price = 300;

ในคำสั่งข้างต้น เรากำลังลบแถวที่มี id เป็น 3 และราคาเป็น 300 ตอนนี้เราสามารถเรียกดูข้อมูลจากตารางได้แล้ว:

SELECT * FROM Price;

สิ่งนี้ส่งคืนสิ่งต่อไปนี้:

PostgreSQL ลบแบบสอบถามที่มีสองเงื่อนไข

บันทึกที่มี ID 3 และราคา 300 ถูกลบไปแล้ว

PostgreSQL คำสั่งลบโดยใช้เงื่อนไข EXISTS

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

เนื่องจากคำสั่ง FROM ไม่อนุญาตให้ระบุรายการจากหลายตารางเมื่อทำการลบ ดังนั้นคำสั่ง EXISTS จึงมีประโยชน์มาก เรามีตารางสองตารางดังต่อไปนี้:

หนังสือ:

PostgreSQL คำสั่งลบโดยใช้เงื่อนไข EXISTS

ราคา:

PostgreSQL คำสั่งลบโดยใช้เงื่อนไข EXISTS

จากนั้นเราสามารถรันแบบสอบถามต่อไปนี้ได้:

DELETE FROM Book
WHERE EXISTS
  (SELECT 1
    FROM Price
    WHERE Price.id = Book.id
    AND price < 250 );

คำสั่งนี้จะลบแถวในตาราง Book ที่มี id ตรงกันในตาราง Price และมีราคาต่ำกว่า 250

ขณะนี้ตารางหนังสือเป็นดังนี้:

PostgreSQL คำสั่งลบโดยใช้เงื่อนไข EXISTS

บันทึกที่มีรหัส 1 ถูกลบแล้ว

วิธีการลบแถวใน PostgreSQL โดยใช้ pgAdmin

นอกจากนี้ ยังสามารถเรียกใช้คำสั่งลบข้อมูลแบบเดียวกันได้ผ่านทางอินเทอร์เฟซ pgAdmin โดยทำตามขั้นตอนด้านล่างนี้:

โดยมีเงื่อนไขข้อเดียว

ขั้นตอน 1) เข้าสู่ระบบบัญชี pgAdmin ของคุณ เปิด pgAdmin และเข้าสู่ระบบบัญชีของคุณโดยใช้ข้อมูลประจำตัวของคุณ

ขั้นตอน 2) สร้างฐานข้อมูลสาธิต

  1. จากแถบนำทางด้านซ้าย คลิกฐานข้อมูล
  2. คลิกสาธิต

ลบแถวใน PostgreSQL โดยใช้ pgAdmin

ขั้นตอน 3) พิมพ์แบบสอบถามด้านล่างในตัวแก้ไขแบบสอบถาม:

DELETE FROM Price
WHERE id = 4;

ขั้นตอน 4) คลิกปุ่มดำเนินการ

ลบแถวใน PostgreSQL โดยใช้ pgAdmin

ขั้นตอน 5) เรามาตรวจสอบกันว่าแถวนั้นถูกลบไปแล้วหรือไม่:

ลบแถวใน PostgreSQL โดยใช้ pgAdmin

โดยมีเงื่อนไขสองประการ

ขั้นตอน 1) เข้าสู่ระบบบัญชี pgAdmin ของคุณ

ขั้นตอน 2)

  1. จากแถบนำทางด้านซ้าย คลิกฐานข้อมูล
  2. คลิกสาธิต

ลบแถวใน PostgreSQL โดยใช้ pgAdmin

ขั้นตอน 3) พิมพ์แบบสอบถามในตัวแก้ไขแบบสอบถาม:

DELETE FROM Price
WHERE id = 3
AND price = 300;

ขั้นตอน 4) คลิกปุ่มดำเนินการ

ลบแถวใน PostgreSQL โดยใช้ pgAdmin

ขั้นตอน 5) ให้เราตรวจสอบว่าการลบสำเร็จหรือไม่:

ลบแถวใน PostgreSQL โดยใช้ pgAdmin

การใช้เงื่อนไขที่มีอยู่

ขั้นตอน 1) เข้าสู่ระบบบัญชี pgAdmin ของคุณ

ขั้นตอน 2)

  1. จากแถบนำทางด้านซ้าย คลิกฐานข้อมูล
  2. คลิกสาธิต

ลบแถวโดยใช้เงื่อนไข EXISTS ใน pgAdmin

ขั้นตอน 3) พิมพ์แบบสอบถามในตัวแก้ไขแบบสอบถาม:

DELETE FROM Book
WHERE EXISTS
  (SELECT 1
    FROM Price
    WHERE Price.id = Book.id
    AND price < 250 );

ขั้นตอน 4) คลิกปุ่มดำเนินการ

ลบแถวโดยใช้เงื่อนไข EXISTS ใน pgAdmin

ขั้นตอน 5) ให้เราตรวจสอบว่าการลบสำเร็จหรือไม่:

ลบแถวโดยใช้เงื่อนไข EXISTS ใน pgAdmin

ดาวน์โหลดฐานข้อมูลที่ใช้ในบทช่วยสอนนี้

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

คำสั่ง TRUNCATE จะลบทุกแถวทันทีและรีเซ็ตพื้นที่จัดเก็บ แต่จะไม่สนใจเงื่อนไข WHERE และทริกเกอร์ต่อแถว ส่วนคำสั่ง DELETE จะลบแถวที่เลือกโดยใช้เงื่อนไข WHERE เรียกใช้ทริกเกอร์ของแถว และสามารถย้อนกลับได้ภายในธุรกรรม

เพิ่มคำสั่ง USING: DELETE FROM member USING denylist WHERE member.phone = denylist.phone คำสั่งนี้จะเชื่อมตารางที่สองและลบแถวที่ตรงกัน ทำให้ได้ผลลัพธ์เหมือนกับคำสั่ง EXISTS แต่มีไวยากรณ์การเชื่อมตารางที่ชัดเจนกว่า

คำสั่ง RETURNING จะแสดงคอลัมน์จากแถวที่เพิ่งถูกลบไปในคำสั่งเดียวกัน ตัวอย่างเช่น: DELETE FROM Price WHERE id = 4 RETURNING *, and PostgreSQL คืนค่าข้อมูลที่ถูกลบออกเพื่อให้แอปพลิเคชันสามารถบันทึกหรือยืนยันการเปลี่ยนแปลงได้

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

เก็บสำเนาไว้หนึ่งชุดต่อกลุ่มโดยใช้คอลัมน์ ctid ที่ซ่อนไว้: DELETE FROM Price a USING Price b WHERE a.ctid < b.ctid AND a.id = b.id. วิธีนี้จะลบแถวที่ซ้ำกันออกไปโดยคงไว้เพียงระเบียนเดียว

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

ผู้ช่วย AI จะแปลกฎภาษาอังกฤษธรรมดาให้เป็นคำสั่ง DELETE ที่มีเงื่อนไข WHERE ที่ถูกต้อง แนะนำ EXISTS หรือ USING สำหรับการลบข้อมูลข้ามตาราง และแจ้งเตือนคำสั่งที่ขาดเงื่อนไขซึ่งจะลบข้อมูลทั้งตาราง

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

สรุปโพสต์นี้ด้วย: