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

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

PostgreSQL觸發(fā)器

PostgreSQL觸發(fā)器是一組動(dòng)作或數(shù)據(jù)庫(kù)回調(diào)函數(shù),它們?cè)谥付ǖ谋砩蠄?zhí)行指定的數(shù)據(jù)庫(kù)事件(即,INSERT,UPDATE,DELETETRUNCATE語(yǔ)句)時(shí)自動(dòng)運(yùn)行。 觸發(fā)器用于驗(yàn)證輸入數(shù)據(jù),執(zhí)行業(yè)務(wù)規(guī)則,保持審計(jì)跟蹤等。

觸發(fā)器的重點(diǎn)知識(shí)

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

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

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

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

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

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

語(yǔ)法

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

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

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

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

觸發(fā)器例子

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

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

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

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

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

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

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

執(zhí)行以下查詢語(yǔ)句來(lái)創(chuàng)建函數(shù)/過(guò)程:

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)在通過(guò)使用以下查詢語(yǔ)句在COMPANY表上創(chuàng)建一個(gè)觸發(fā)器:

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

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

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

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

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

可以確定的是在插入數(shù)據(jù)后觸發(fā)了觸發(fā)器,PostgreSQL也自動(dòng)向AUDIT表中創(chuàng)建/插入兩個(gè)記錄。 這些記錄是觸發(fā)的結(jié)果,這是因?yàn)槲覀冊(cè)?code>AFTER INSERT on COMPANY表上創(chuàng)建了這些記錄。

PostgreSQL觸發(fā)器的使用

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

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

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

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