PostgreSQL ทริกเกอร์: สร้าง แสดงรายการ & วางพร้อมตัวอย่าง
ทริกเกอร์คืออะไร PostgreSQL?
A PostgreSQL ทริกเกอร์ เป็นฟังก์ชันที่ถูกทริกเกอร์โดยอัตโนมัติเมื่อมีเหตุการณ์ฐานข้อมูลเกิดขึ้นบนวัตถุฐานข้อมูล ตัวอย่างเช่นตาราง ตัวอย่างของเหตุการณ์ฐานข้อมูลที่สามารถเปิดใช้งานทริกเกอร์ ได้แก่ INSERT, UPDATE, DELETE ฯลฯ นอกจากนี้ เมื่อคุณสร้างทริกเกอร์สำหรับตาราง ทริกเกอร์จะหายไปโดยอัตโนมัติเมื่อตารางนั้นถูกลบ
วิธีการใช้ทริกเกอร์ PostgreSQL?
สามารถทำเครื่องหมายทริกเกอร์ด้วยตัวดำเนินการ FOR EACH ROW ในระหว่างการสร้างได้ ทริกเกอร์ดังกล่าวจะถูกเรียกใช้หนึ่งครั้งสำหรับแต่ละแถวที่แก้ไขโดยการดำเนินการ ทริกเกอร์ยังสามารถทำเครื่องหมายด้วยตัวดำเนินการ FOR EACH STATEMENT ในระหว่างการสร้างได้เช่นกัน ทริกเกอร์นี้จะถูกดำเนินการเพียงครั้งเดียวสำหรับการดำเนินการเฉพาะ
PostgreSQL สร้างทริกเกอร์
ในการสร้างทริกเกอร์ เราใช้ฟังก์ชัน CREATE TRIGGER นี่คือไวยากรณ์สำหรับฟังก์ชัน:
CREATE TRIGGER trigger-name [BEFORE|AFTER|INSTEAD OF] event-name ON table-name [ -- Trigger logic ];
ชื่อทริกเกอร์คือชื่อของทริกเกอร์
BEFORE, AFTER และ INSTEAD OF คือคีย์เวิร์ดที่กำหนดว่าจะเรียกใช้ทริกเกอร์เมื่อใด
ชื่อเหตุการณ์คือชื่อของเหตุการณ์ที่จะทำให้ทริกเกอร์ถูกเรียกใช้ นี้สามารถ INSERT, อัปเดต, ลบ ฯลฯ
ชื่อตารางคือชื่อของตารางที่จะสร้างทริกเกอร์
หากจะต้องสร้างทริกเกอร์สำหรับการดำเนินการ INSERT เราจะต้องเพิ่มพารามิเตอร์ชื่อคอลัมน์ ON
รูปแบบประโยคต่อไปนี้แสดงให้เห็นสิ่งนี้:
CREATE TRIGGER trigger-name AFTER INSERT ON column-name ON table-name [ -- Trigger logic ];
PostgreSQL สร้างตัวอย่างทริกเกอร์
เราจะใช้ตารางราคาที่ระบุด้านล่าง:
ราคา:
ให้เราสร้างตารางใหม่ Price_Audits ซึ่งเราจะบันทึกการเปลี่ยนแปลงที่ทำกับตารางราคา:
CREATE TABLE Price_Audits ( book_id INT NOT NULL, entry_date text NOT NULL );
ตอนนี้เราสามารถกำหนดฟังก์ชันใหม่ชื่อ auditfunc ได้:
CREATE OR REPLACE FUNCTION auditfunc() RETURNS TRIGGER AS $my_table$ BEGIN INSERT INTO Price_Audits(book_id, entry_date) VALUES (new.ID, current_timestamp); RETURN NEW; END; $my_table$ LANGUAGE plpgsql;
ฟังก์ชันด้านบนจะแทรกบันทึกลงในตาราง Price_Audits รวมถึงรหัสแถวใหม่และเวลาที่สร้างบันทึก
ตอนนี้เรามีฟังก์ชันทริกเกอร์แล้ว เราควรผูกมันเข้ากับตารางราคาของเรา เราจะให้ทริกเกอร์ชื่อ price_trigger ก่อนที่จะสร้างบันทึกใหม่ ฟังก์ชันทริกเกอร์จะถูกเรียกใช้โดยอัตโนมัติเพื่อบันทึกการเปลี่ยนแปลง นี่คือทริกเกอร์:
CREATE TRIGGER price_trigger AFTER INSERT ON Price FOR EACH ROW EXECUTE PROCEDURE auditfunc();
ให้เราแทรกบันทึกใหม่ลงในตารางราคา:
INSERT INTO Price VALUES (3, 400);
ตอนนี้เราได้แทรกบันทึกลงในตารางราคาแล้ว ควรแทรกบันทึกลงในตาราง Price_Audit ด้วย นี่จะเป็นผลมาจากทริกเกอร์ที่เราสร้างขึ้นในตารางราคา ให้เราตรวจสอบสิ่งนี้:
SELECT * FROM Price_Audits;
สิ่งนี้จะส่งคืนสิ่งต่อไปนี้:
ทริกเกอร์ทำงานได้สำเร็จ
ทริกเกอร์รายการ Postgres
ทริกเกอร์ทั้งหมดที่คุณสร้างขึ้น PostgreSQL จะถูกเก็บไว้ในตาราง pg_trigger หากต้องการดูรายการทริกเกอร์ที่คุณมี ฐานข้อมูลค้นหาตารางโดยการรันคำสั่ง SELECT ดังที่แสดงด้านล่าง:
SELECT tgname FROM pg_trigger;
สิ่งนี้ส่งคืนสิ่งต่อไปนี้:
คอลัมน์ tgname ของตาราง pg_trigger หมายถึงชื่อของทริกเกอร์
Postgres ปล่อยทริกเกอร์
เพื่อดรอป PostgreSQL ทริกเกอร์ เราใช้คำสั่ง DROP TRIGGER โดยมีรูปแบบดังต่อไปนี้:
DROP TRIGGER [IF EXISTS] trigger-name ON table-name [ CASCADE | RESTRICT ];
พารามิเตอร์ชื่อทริกเกอร์หมายถึงชื่อของทริกเกอร์ที่จะถูกลบ
ชื่อตารางหมายถึงชื่อของตารางที่ต้องการลบทริกเกอร์
ส่วนคำสั่ง IF EXISTS พยายามลบทริกเกอร์ที่มีอยู่ หากคุณพยายามลบทริกเกอร์ที่ไม่มีอยู่โดยไม่ใช้ส่วนคำสั่ง IF EXISTS คุณจะได้รับข้อผิดพลาด
ตัวเลือก CASCADE จะช่วยให้คุณวางวัตถุทั้งหมดที่ขึ้นอยู่กับทริกเกอร์โดยอัตโนมัติ
หากคุณใช้ตัวเลือก RESTRICT ทริกเกอร์จะไม่ถูกลบหากออบเจ็กต์ขึ้นอยู่กับทริกเกอร์
ตัวอย่างเช่น:
หากต้องการลบทริกเกอร์ที่ชื่อ example_trigger บนตาราง Price ให้ใช้คำสั่งต่อไปนี้:
หากต้องการลบทริกเกอร์ที่ชื่อ example_trigger บนตาราง Company ให้รันคำสั่งต่อไปนี้:
DROP TRIGGER example_trigger IF EXISTS ON Company;
การใช้งาน pgAdmin
ตอนนี้เรามาดูกันว่าการกระทำทั้งสามดำเนินการอย่างไรโดยใช้ pgAdmin
วิธีการสร้างทริกเกอร์ใน PostgreSQL โดยใช้ pgAdmin
นี่คือวิธีที่คุณสามารถสร้างทริกเกอร์ใน Postgres โดยใช้ pgAdmin:
ขั้นตอนที่ 1) เข้าสู่ระบบบัญชี pgAdmin ของคุณ
เปิด pgAdmin และเข้าสู่ระบบบัญชีของคุณโดยใช้ข้อมูลประจำตัวของคุณ
ขั้นตอนที่ 2) สร้างฐานข้อมูลสาธิต
- จากแถบนำทางทางด้านซ้ายให้คลิกฐานข้อมูล
- คลิกสาธิต
ขั้นตอนที่ 3) พิมพ์แบบสอบถาม
หากต้องการสร้างตาราง Price_Audits ให้พิมพ์แบบสอบถามในตัวแก้ไข:
CREATE TABLE Price_Audits ( book_id INT NOT NULL, entry_date text NOT NULL )
ขั้นตอนที่ 4) ดำเนินการแบบสอบถาม
คลิกปุ่มดำเนินการ
ขั้นตอนที่ 5) เรียกใช้โค้ดสำหรับ auditfunc
เรียกใช้โค้ดต่อไปนี้เพื่อกำหนดฟังก์ชัน auditfunc:
CREATE OR REPLACE FUNCTION auditfunc() RETURNS TRIGGER AS $my_table$ BEGIN INSERT INTO Price_Audits(book_id, entry_date) VALUES (new.ID, current_timestamp); RETURN NEW; END; $my_table$ LANGUAGE plpgsql
ขั้นตอนที่ 6) เรียกใช้โค้ดเพื่อสร้างทริกเกอร์
รันโค้ดต่อไปนี้เพื่อสร้างทริกเกอร์ price_trigger:
CREATE TRIGGER price_trigger AFTER INSERT ON Price FOR EACH ROW EXECUTE PROCEDURE auditfunc()
ขั้นตอนที่ 7) แทรกบันทึกใหม่
- รันคำสั่งต่อไปนี้เพื่อแทรกข้อมูลใหม่ลงในตารางราคา:
INSERT INTO Price VALUES (3, 400)
- รันคำสั่งต่อไปนี้เพื่อตรวจสอบว่ามีการเพิ่มระเบียนเข้าไปในตาราง Price_Audits หรือไม่:
SELECT * FROM Price_Audits
สิ่งนี้ควรส่งคืนสิ่งต่อไปนี้:
ขั้นตอนที่ 8) ตรวจสอบเนื้อหาของตาราง
ให้เราตรวจสอบเนื้อหาของตาราง Price_Audits:
รายชื่อทริกเกอร์โดยใช้ pgAdmin
ขั้นตอน 1) รันคำสั่งต่อไปนี้เพื่อตรวจสอบทริกเกอร์ในฐานข้อมูลของคุณ:
SELECT tgname FROM pg_trigger
สิ่งนี้ส่งคืนสิ่งต่อไปนี้:
การวางทริกเกอร์โดยใช้ pgAdmin
หากต้องการลบทริกเกอร์ที่ชื่อ example_trigger บนตาราง Company ให้รันคำสั่งต่อไปนี้:
DROP TRIGGER example_trigger IF EXISTS ON Company
สรุป
- A PostgreSQL ทริกเกอร์หมายถึงฟังก์ชันที่ทริกเกอร์โดยอัตโนมัติเมื่อมีเหตุการณ์ฐานข้อมูลเกิดขึ้นบนออบเจ็กต์ฐานข้อมูล เช่น ตาราง
- ตัวอย่างของเหตุการณ์ฐานข้อมูลดังกล่าว ได้แก่ INSERT, UPDATE, DELETE เป็นต้น
- ทริกเกอร์มีอยู่เฉพาะในช่วงอายุของออบเจ็กต์ฐานข้อมูลที่ถูกสร้างขึ้นเท่านั้น
- หากวัตถุฐานข้อมูลถูกลบ ทริกเกอร์จะถูกลบด้วย
- PostgreSQL ทริกเกอร์ถูกสร้างขึ้นโดยใช้คำสั่ง CREATE TRIGGER
- ทริกเกอร์แต่ละตัวเชื่อมโยงกับฟังก์ชันที่ระบุว่าทริกเกอร์จะทำอะไรเมื่อมีการเรียกใช้
ดาวน์โหลดฐานข้อมูลที่ใช้ในบทช่วยสอนนี้