日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

PostgreSQL触发器的使用

發(fā)布時間:2025/3/20 数据库 57 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PostgreSQL触发器的使用 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

原文:?https://www.yiibai.com/postgresql/postgresql-trigger.html

?

?

?

------------------------------------------------------------------------------------------------------------------------------

PostgreSQL觸發(fā)器是一組動作或數(shù)據(jù)庫回調函數(shù),它們在指定的表上執(zhí)行指定的數(shù)據(jù)庫事件(即,INSERT,UPDATE,DELETE或TRUNCATE語句)時自動運行。 觸發(fā)器用于驗證輸入數(shù)據(jù),執(zhí)行業(yè)務規(guī)則,保持審計跟蹤等。

觸發(fā)器的重點知識

  • PostgreSQL在以下情況下執(zhí)行/調用觸發(fā)器:在嘗試操作之前(在檢查約束并嘗試INSERT,UPDATE或DELETE之前)。或者在操作完成后(在檢查約束并且INSERT,UPDATE或DELETE完成后)。或者不是操作(在視圖中INSERT,UPDATE或DELETE的情況下)

  • 對于操作修改的每一行,都會調用一個標記為FOR EACH ROWS的觸發(fā)器。 另一方面,標記為FOR EACH STATEMENT的觸發(fā)器只對任何給定的操作執(zhí)行一次,而不管它修改多少行。

  • 您可以為同一事件定義同一類型的多個觸發(fā)器,但條件是按名稱按字母順序觸發(fā)。

  • 當與它們相關聯(lián)的表被刪除時,觸發(fā)器被自動刪除。
  • PostgreSQL創(chuàng)建觸發(fā)器

    CREATE TRIGGER語句用于在PostgreSQL表中創(chuàng)建一個新的觸發(fā)器。 當表發(fā)生特定事件(即INSERT,UPDATE和DELETE)時,它被激活。

    語法

    CREATE TRIGGER trigger_name [BEFORE|AFTER|INSTEAD OF] event_name ON table_name [ -- Trigger logic goes here.... ]; SQL

    在這里,event_name可以是INSERT,UPDATE,DELETE和TRUNCATE數(shù)據(jù)庫操作上提到的表table_name。 您可以選擇在表名后指定FOR EACH ROW。

    下面來看看看如何在INSERT操作中創(chuàng)建觸發(fā)器的語法。

    CREATE TRIGGER trigger_name AFTER INSERT ON column_name ON table_name [ -- Trigger logic goes here.... ]; SQL

    觸發(fā)器例子

    下面舉個例子來演示PostgreSQL在INSERT語句之后創(chuàng)建觸發(fā)器。在以下示例中,我們對每個記錄插入到COMPANY表中進行審核(審計)。

    使用以下查詢創(chuàng)建一個名為COMPANY的表:

    CREATE TABLE COMPANY( ID INT PRIMARY KEY NOT NULL, NAME TEXT NOT NULL, AGE INT NOT NULL, ADDRESS CHAR(50), SALARY REAL ); SQL

    為了保存審計/審核,我們將創(chuàng)建一個名為AUDIT的新表,只要在COMPANY表中有一個新記錄的條目,就會插入日志消息。

    使用以下查詢語句創(chuàng)建另一個表Audit:

    CREATE TABLE AUDIT( EMP_ID INT NOT NULL, ENTRY_DATE TEXT NOT NULL ); SQL

    在COMPANY表上創(chuàng)建觸發(fā)器之前,首先創(chuàng)建一個名為auditlogfunc()的函數(shù)/過程。

    執(zhí)行以下查詢語句來創(chuàng)建函數(shù)/過程:

    CREATE OR REPLACE FUNCTION auditlogfunc() RETURNS TRIGGER AS $example_table$ BEGIN INSERT INTO AUDIT(EMP_ID, ENTRY_DATE) VALUES (new.ID, current_timestamp); RETURN NEW; END; $example_table$ LANGUAGE plpgsql; SQL

    執(zhí)行結果如下所示-

    現(xiàn)在通過使用以下查詢語句在COMPANY表上創(chuàng)建一個觸發(fā)器:

    CREATE TRIGGER example_trigger AFTER INSERT ON COMPANY FOR EACH ROW EXECUTE PROCEDURE auditlogfunc(); SQL

    執(zhí)行結果如下所示-

    向COMPANY表中插入一些數(shù)據(jù)記錄,以驗證觸發(fā)器執(zhí)行情況。

    INSERT INTO COMPANY VALUES(1, '小米科技', 8, '北京市朝陽區(qū)', 9999); INSERT INTO COMPANY VALUES(2, '京東中科', 6, '廣州市天河區(qū)', 8999); SQL

    在執(zhí)行上面兩條插入語句后,現(xiàn)我們來看AUDIT表是否有自動插入兩條審核記錄。

    可以確定的是在插入數(shù)據(jù)后觸發(fā)了觸發(fā)器,PostgreSQL也自動向AUDIT表中創(chuàng)建/插入兩個記錄。 這些記錄是觸發(fā)的結果,這是因為我們在AFTER INSERT on COMPANY表上創(chuàng)建了這些記錄。

    PostgreSQL觸發(fā)器的使用

    PostgreSQL觸發(fā)器可用于以下目的:

    • 驗證輸入數(shù)據(jù)。
    • 執(zhí)行業(yè)務規(guī)則。
    • 為不同文件中新插入的行生成唯一值。
    • 寫入其他文件以進行審計跟蹤。
    • 從其他文件查詢交叉引用目的。
    • 訪問系統(tǒng)函數(shù)。
    • 將數(shù)據(jù)復制到不同的文件以實現(xiàn)數(shù)據(jù)一致性。

    使用觸發(fā)器的優(yōu)點

    • 它提高了應用程序的開發(fā)速度。 因為數(shù)據(jù)庫存儲觸發(fā)器,所以您不必將觸發(fā)器操作編碼到每個數(shù)據(jù)庫應用程序中。
    • 全局執(zhí)法業(yè)務規(guī)則。定義觸發(fā)器一次,然后將其重用于使用數(shù)據(jù)庫的任何應用程序。
    • 更容易維護 如果業(yè)務策略發(fā)生變化,則只需更改相應的觸發(fā)程序,而不是每個應用程序。
    • 提高客戶/服務器環(huán)境的性能。 所有規(guī)則在結果返回之前在服務器中運行

    總結

    以上是生活随笔為你收集整理的PostgreSQL触发器的使用的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。