最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

入門(mén)

簡(jiǎn)介

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

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

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

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

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

觸發(fā)器的類(lèi)型

按照觸發(fā)時(shí)間分類(lèi)

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

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

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

按照觸發(fā)級(jí)別分類(lèi)

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

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

簡(jiǎn)介

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

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

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

示例 1:審計(jì)日志

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

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

Step 2: 編寫(xiě)觸發(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:自動(dòng)更新修改時(shí)間

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

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í)我們不希望某些重要數(shù)據(jù)被刪除,可以通過(guò) 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ā)器的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)PostgreSQL創(chuàng)建觸發(fā)器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • PostgreSQL工具pgAdmin的介紹及使用

    PostgreSQL工具pgAdmin的介紹及使用

    本文主要介紹了PostgreSQL工具pgAdmin的介紹及使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • postgresql數(shù)據(jù)添加兩個(gè)字段聯(lián)合唯一的操作

    postgresql數(shù)據(jù)添加兩個(gè)字段聯(lián)合唯一的操作

    這篇文章主要介紹了postgresql數(shù)據(jù)添加兩個(gè)字段聯(lián)合唯一的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-02-02
  • PostgreSQL數(shù)據(jù)庫(kù)部署linux服務(wù)器完整教程

    PostgreSQL數(shù)據(jù)庫(kù)部署linux服務(wù)器完整教程

    本文主要述了在Linux服務(wù)器上部署PostgreSQL數(shù)據(jù)庫(kù)的過(guò)程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2026-05-05
  • PostgreSql?JDBC事務(wù)操作方法詳解

    PostgreSql?JDBC事務(wù)操作方法詳解

    這篇文章主要為大家介紹了PostgreSql?JDBC事務(wù)操作方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • PostgreSQL三種自增列sequence,serial,identity的用法區(qū)別

    PostgreSQL三種自增列sequence,serial,identity的用法區(qū)別

    這篇文章主要介紹了PostgreSQL三種自增列sequence,serial,identity的用法區(qū)別,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-02-02
  • 使用PostgreSQL為表或視圖創(chuàng)建備注的操作

    使用PostgreSQL為表或視圖創(chuàng)建備注的操作

    這篇文章主要介紹了使用PostgreSQL為表或視圖創(chuàng)建備注的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-01-01
  • pgsql之pg_stat_replication的使用詳解

    pgsql之pg_stat_replication的使用詳解

    這篇文章主要介紹了pgsql之pg_stat_replication的使用詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-01-01
  • PostgreSQL死鎖了怎么辦及處理方法

    PostgreSQL死鎖了怎么辦及處理方法

    這篇文章主要介紹了PostgreSQL死鎖了怎么辦?本文給大家講解了死鎖原因及解決方法,介紹l避免死鎖的實(shí)戰(zhàn)建議,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2023-01-01
  • PostgreSQL 的 COPY 命令深度解析

    PostgreSQL 的 COPY 命令深度解析

    PostgreSQL 的 COPY 命令是高效數(shù)據(jù)導(dǎo)入導(dǎo)出的核心工具,性能遠(yuǎn)超常規(guī) INSERT 語(yǔ)句,下面給大家介紹PostgreSQL 的 COPY 命令深度解析,感興趣的朋友跟隨小編一起看看吧
    2025-05-05
  • psql 執(zhí)行文件 permission denied的解決

    psql 執(zhí)行文件 permission denied的解決

    這篇文章主要介紹了psql 執(zhí)行文件 permission denied的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-01-01

最新評(píng)論

丹东市| 泉州市| 会理县| 东平县| 长兴县| 嵩明县| 镇宁| 忻州市| 天水市| 绥江县| 霍山县| 内黄县| 茶陵县| 洱源县| 临沧市| 彰化县| 湄潭县| 夹江县| 和硕县| 徐州市| 仁怀市| 洞口县| 抚顺县| 泊头市| 额济纳旗| 枞阳县| 辽阳县| 班戈县| 广宗县| 定南县| 娱乐| 若尔盖县| 长子县| 渝中区| 十堰市| 泰州市| 青海省| 陆丰市| 准格尔旗| 新干县| 宜昌市|