在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ 數(shù)據(jù)庫/ PostgreSQL觸發(fā)器
PostgreSQL LIKE條件
PostgreSQL截斷表(TRUNCATE TABLE語句)
C/C++連接PostgreSQL數(shù)據(jù)庫
PostgreSQL別名
PostgreSQL日期和時間函數(shù)
PostgreSQL NOT IN條件
PostgreSQL歷史
PostgreSQL事務(wù)
PostgreSQL AND & OR條件
PostgreSQL NULL值
PostgreSQL教程
PostgreSQL更新數(shù)據(jù)(UPDATE語句)
PostgreSQL ORDER BY子句
PostgreSQL分組(GROUP BY子句)
PostgreSQL數(shù)據(jù)類型
PostgreSQL特點
PostgreSQL刪除數(shù)據(jù)庫
PostgreSQL UNIONS子句
PostgreSQL AND條件
PostgreSQL索引
PostgreSQL刪除表
Perl連接PostgreSQL數(shù)據(jù)庫
PostgreSQL視圖
PostgreSQL修改表(ALTER TABLE語句)
PostgreSQL全外連接
PostgreSQL命令語法大全
PostgreSQL查詢數(shù)據(jù)(SELECT語句)
PostgreSQL自動遞增
PostgreSQL左外連接
PostgreSQL創(chuàng)建表
PostgreSQL模式(架構(gòu))
PostgreSQL觸發(fā)器
PostgreSQL安裝(Windows)
PostgreSQL NOT條件
PostgreSQL Having子句
PostgreSQL函數(shù)(存儲過程)
Java連接PostgreSQL數(shù)據(jù)庫
PostgreSQL權(quán)限
PostgreSQL OR條件
PostgreSQL創(chuàng)建數(shù)據(jù)庫
PostgreSQL BETWEEN條件
PostgreSQL IN條件
Python連接PostgreSQL數(shù)據(jù)庫
PostgreSQL刪除數(shù)據(jù)(DELETE語句)
PostgreSQL子查詢
PostgreSQL右外連接
PostgreSQL插入數(shù)據(jù)(INSERT語句)
PostgreSQL是什么?
PostgreSQL連接(內(nèi)連接)
PHP連接PostgreSQL數(shù)據(jù)庫
PostgreSQL條件查詢
PostgreSQL鎖
PostgreSQL跨連接(CROSS JOIN)

PostgreSQL觸發(fā)器

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

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

  1. PostgreSQL在以下情況下執(zhí)行/調(diào)用觸發(fā)器:在嘗試操作之前(在檢查約束并嘗試INSERT,UPDATEDELETE之前)?;蛘咴诓僮魍瓿珊?在檢查約束并且INSERTUPDATEDELETE完成后)。或者不是操作(在視圖中INSERT,UPDATEDELETE的情況下)

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

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

  4. 當與它們相關(guān)聯(lián)的表被刪除時,觸發(fā)器被自動刪除。

PostgreSQL創(chuàng)建觸發(fā)器

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

語法

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

在這里,event_name可以是INSERT,UPDATE,DELETETRUNCATE數(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....  
];

觸發(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  
);

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

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

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

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;

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

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

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

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

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

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

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

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

PostgreSQL觸發(fā)器的使用

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

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

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

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