亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

PostgreSQL創(chuàng)建觸發(fā)器的實現(xiàn)示例

 更新時間:2025年06月16日 09:28:21   作者:熊大如如  
PostgreSQL的觸發(fā)器Trigger是一類特殊的數(shù)據(jù)庫對象,本文主要介紹了PostgreSQL創(chuàng)建觸發(fā)器的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

入門

簡介

PostgreSQL 的 觸發(fā)器 Trigger 是一類特殊的數(shù)據(jù)庫對象,在表的 INSERT、UPDATE 或 DELETE 事件發(fā)生時,自動執(zhí)行預定義的函數(shù)(觸發(fā)器函數(shù))。它常用于 數(shù)據(jù)完整性約束、審計日志、自動計算、復雜的業(yè)務邏輯處理等場景

觸發(fā)器的構(gòu)成

一個完整的觸發(fā)器由兩個部分組成:

觸發(fā)器函數(shù)(Trigger Function):觸發(fā)器執(zhí)行的具體邏輯,必須返回 TRIGGER 類型

觸發(fā)器(Trigger):綁定到表的某個事件上,調(diào)用觸發(fā)器函數(shù)

觸發(fā)器的類型

按照觸發(fā)時間分類

  • BEFORE 觸發(fā)器(在事件發(fā)生前執(zhí)行)
  • AFTER 觸發(fā)器(在事件發(fā)生后執(zhí)行)
  • INSTEAD OF 觸發(fā)器(替代事件執(zhí)行,僅適用于視圖)

按照觸發(fā)事件分類

  • INSERT 觸發(fā)器(在插入新數(shù)據(jù)時觸發(fā))
  • UPDATE 觸發(fā)器(在數(shù)據(jù)更新時觸發(fā))
  • DELETE 觸發(fā)器(在數(shù)據(jù)刪除時觸發(fā))
  • TRUNCATE 觸發(fā)器(在 TRUNCATE 操作時觸發(fā))

按照觸發(fā)級別分類

  • 行級觸發(fā)器(FOR EACH ROW):對受影響的每一行數(shù)據(jù)觸發(fā)一次
  • 語句級觸發(fā)器(FOR EACH STATEMENT):對整個 SQL 語句僅觸發(fā)一次

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

簡介

PostgreSQL 觸發(fā)器的創(chuàng)建需要兩步:

  • 編寫觸發(fā)器函數(shù)(必須返回 TRIGGER 類型)
  • 創(chuàng)建觸發(fā)器 并綁定到表

假設(shè)我們有一個 users 表,我們希望在有新用戶插入時,自動記錄日志到 user_logs 表中

示例 1:審計日志

Step 1: 創(chuàng)建審計日志表

CREATE TABLE user_logs (
    log_id SERIAL PRIMARY KEY,
    user_id UUID,
    action TEXT,
    log_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

Step 2: 編寫觸發(fā)器函數(shù)

CREATE OR REPLACE FUNCTION log_user_insert() RETURNS TRIGGER AS $$
BEGIN
    INSERT INTO user_logs (user_id, action)
    VALUES (NEW.id, 'User created');
    RETURN NEW;
END;
$$ LANGUAGE plpgsql;

Step 3: 創(chuàng)建觸發(fā)器

CREATE TRIGGER user_insert_trigger
AFTER INSERT ON users
FOR EACH ROW
EXECUTE FUNCTION log_user_insert();

示例 2:自動更新修改時間

假設(shè) users 表中有一個 updated_at 字段,我們希望在用戶數(shù)據(jù)更新時,自動更新 updated_at 時間戳。

Step 1: 在 users 表添加 updated_at 字段

ALTER TABLE users ADD COLUMN updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP;

Step 2: 創(chuàng)建觸發(fā)器函數(shù)

CREATE OR REPLACE FUNCTION update_timestamp() RETURNS TRIGGER AS $$
BEGIN
    NEW.updated_at = CURRENT_TIMESTAMP;
    RETURN NEW;
END;
$$ LANGUAGE plpgsql;

Step 3: 創(chuàng)建觸發(fā)器

CREATE TRIGGER update_users_timestamp
BEFORE UPDATE ON users
FOR EACH ROW
EXECUTE FUNCTION update_timestamp();

示例 3:防止 DELETE

有時我們不希望某些重要數(shù)據(jù)被刪除,可以通過 BEFORE DELETE** 觸發(fā)器阻止刪除**。

Step 1: 創(chuàng)建觸發(fā)器函數(shù)

CREATE OR REPLACE FUNCTION prevent_delete() RETURNS TRIGGER AS $$
BEGIN
    RAISE EXCEPTION '不允許刪除數(shù)據(jù)!';
END;
$$ LANGUAGE plpgsql;

Step 2: 綁定到 users 表

CREATE TRIGGER prevent_users_deletion
BEFORE DELETE ON users
FOR EACH ROW
EXECUTE FUNCTION prevent_delete();

觸發(fā)器的管理

查看已有觸發(fā)器

SELECT tgname, relname, tgtype, proname 
FROM pg_trigger 
JOIN pg_class ON pg_trigger.tgrelid = pg_class.oid
JOIN pg_proc ON pg_trigger.tgfoid = pg_proc.oid
WHERE NOT tgisinternal;

刪除觸發(fā)器

DROP TRIGGER IF EXISTS user_insert_trigger ON users;

刪除觸發(fā)器函數(shù)

DROP FUNCTION IF EXISTS log_user_insert();

到此這篇關(guān)于PostgreSQL創(chuàng)建觸發(fā)器的實現(xiàn)示例的文章就介紹到這了,更多相關(guān)PostgreSQL創(chuàng)建觸發(fā)器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • PostgreSQL存儲過程循環(huán)調(diào)用方式

    PostgreSQL存儲過程循環(huán)調(diào)用方式

    這篇文章主要介紹了PostgreSQL存儲過程循環(huán)調(diào)用方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • PostgreSQL行轉(zhuǎn)列的多種方法

    PostgreSQL行轉(zhuǎn)列的多種方法

    這篇文章主要介紹了PostgreSQL行轉(zhuǎn)列的多種方法,本文給大家分享三種方法,每種方法結(jié)合示例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2023-10-10
  • PostgreSQL數(shù)據(jù)庫管理系統(tǒng)快速入門

    PostgreSQL數(shù)據(jù)庫管理系統(tǒng)快速入門

    這篇文章主要介紹了PostgreSQL數(shù)據(jù)庫快速入門,PostgreSQL是一個功能強大的開源對象關(guān)系型數(shù)據(jù)庫系統(tǒng),他使用和擴展了SQL語言,并結(jié)合了許多安全存儲和擴展最復雜數(shù)據(jù)工作負載的功能,需要的朋友可以參考下
    2023-07-07
  • pgsql鎖表后kill進程的操作

    pgsql鎖表后kill進程的操作

    這篇文章主要介紹了pgsql鎖表后kill進程的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • PostgreSQL中行鎖的使用

    PostgreSQL中行鎖的使用

    PostgreSQL行鎖分為共享鎖和排他鎖,用于控制并發(fā)事務對行數(shù)據(jù)的訪問,共享鎖允許多事務讀取,排他鎖獨占訪問,本文就來具體介紹一下行鎖,感興趣的可以了解一下
    2025-06-06
  • PostgreSQL判斷字符串是否包含目標字符串的多種方法

    PostgreSQL判斷字符串是否包含目標字符串的多種方法

    這篇文章主要介紹了PostgreSQL判斷字符串是否包含目標字符串的多種方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-02-02
  • PostgreSQL數(shù)據(jù)庫備份的幾種實現(xiàn)方法

    PostgreSQL數(shù)據(jù)庫備份的幾種實現(xiàn)方法

    本文主要介紹了PostgreSQL數(shù)據(jù)庫備份的幾種實現(xiàn)方法,包括pg_dump和pg_dumpall是PostgreSQL備份工具,前者備份單數(shù)據(jù)庫,后者備份整個集群,感興趣的可以了解一下
    2025-06-06
  • 淺談postgresql數(shù)據(jù)庫varchar、char、text的比較

    淺談postgresql數(shù)據(jù)庫varchar、char、text的比較

    這篇文章主要介紹了淺談postgresql數(shù)據(jù)庫varchar、char、text的比較,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • postgresql 利用fdw來實現(xiàn)不同數(shù)據(jù)庫之間數(shù)據(jù)互通(推薦)

    postgresql 利用fdw來實現(xiàn)不同數(shù)據(jù)庫之間數(shù)據(jù)互通(推薦)

    這篇文章主要介紹了postgresql 利用fdw來實現(xiàn)不同數(shù)據(jù)庫之間數(shù)據(jù)互通,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-02-02
  • PostgreSQL中的collations用法詳解

    PostgreSQL中的collations用法詳解

    這篇文章主要介紹了PostgreSQL中的collations用法詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01

最新評論