首页 > 数据库 >无涯教程-PostgreSQL - Triggers(触发器)

无涯教程-PostgreSQL - Triggers(触发器)

时间:2023-12-25 10:35:22浏览次数:48  
标签:触发器 PostgreSQL name Triggers COMPANY 无涯 trigger 表中

PostgreSQL 触发器是数据库回调函数,当发生指定的数据库事件时,它们会自动执行。

Triggers - 语法

创建 trigger 的基本语法如下-

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

在这里, event_name 可以是上述表上的 INSERT,DELETE, UPDATE,和 TRUNCATE 数据库操作table_name 。您可以选择在表名称后指定FOR EACH ROW。

以下是在表的一个或多个指定列上的UPDATE操作上创建触发器的语法,如下所示-

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

Triggers - 示例

让无涯教程考虑一种情况,在这种情况下,无涯教程希望对COMPANY表中插入的每条记录进行审计试用,无涯教程将按如下方式重新创建。

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

为了保持审计试用状态,无涯教程将创建一个名为AUDIT的新表,只要在COMPANY表中有新记录的数据,就会插入日志消息-

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

在这里,ID是AUDIT记录ID,EMP_ID是ID,它将来自COMPANY表,当在COMPANY表中创建记录时DATE将保留时间戳。现在,让无涯教程在COMPANY表上创建触发器,如下所示:

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

其中auditlogfunc()是PostgreSQL 过程并具有以下定义-

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;

现在,无涯教程将开始实际的工作,让无涯教程开始在COMPANY表中插入记录,这将导致在AUDIT表中创建审核日志记录,因此,让无涯教程在COMPANY表中创建一条记录,如下所示-

testdb=# INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (1, 'Paul', 32, 'California', 20000.00 );

这将在COMPANY表中创建一条记录,如下所示-

 id | name | age | address      | salary
----+------+-----+--------------+--------
  1 | Paul |  32 | California   |  20000

同时,将在AUDIT表中创建一条记录,该记录是触发器的输出,该触发器是无涯教程在COMPANY表上的INSERT操作上创建的,同样,您可以根据需要在UPDATE和DELETE操作上创建触发器。

 emp_id |          entry_date
--------+-------------------------------
      1 | 2013-05-05 15:49:59.968+05:30
(1 row)

Triggers - 列出触发器

您可以从 pg_trigger 表中列出当前数据库中的所有触发器,如下所示-

testdb=# SELECT * FROM pg_trigger;

上面给出的PostgreSQL语句将列出所有触发器。

如果要列出特定表上的触发器,则将AND子句与表名一起使用,如下所示:

testdb=# SELECT tgname FROM pg_trigger, pg_class WHERE tgrelid=pg_class.oid AND relname='company';

上面给出的PostgreSQL语句还将仅列出以下一项-

     tgname
-----------------
 example_trigger
(1 row)

Triggers - 删除触发器

以下是DROP命令,可用于删除现有触发器-

testdb=# DROP TRIGGER trigger_name;

参考链接

https://www.learnfk.com/postgresql/postgresql-triggers.html

标签:触发器,PostgreSQL,name,Triggers,COMPANY,无涯,trigger,表中
From: https://blog.51cto.com/u_14033984/8963883

相关文章

  • 无涯教程-PostgreSQL - Unions(联合语句)
    PostgreSQLUNION用于合并两个或多个SELECT语句的输出,而不返回任何重复的行。要使用UNION,每个SELECT必须具有相同数量的选定列,相同数量的列表达式,相同数据类型,并且具有相同的顺序,但它们的长度不必相同。Unions-语法UNION的基本语法如下:SELECTcolumn1[,column2]FR......
  • 无涯教程-PostgreSQL - Joins(连接语句)
    PostgreSQLJoins子句用于合并数据库中两个或多个表中的记录,JOIN是一种通过使用每个表的公用值来组合两个表中的字段的方法。PostgreSQL中的联接类型是-CROSSJOININNERJOINLEFTOUTERJOINRIGHTOUTERJOINFULLOUTERJOIN在继续之前,让无涯教程考虑两个表,COMPANY和DE......
  • 无涯教程-PostgreSQL - 约束条件
    约束是对表的数据列强制执行的规则,这些用于防止将无效数据输入数据库,这样可以确保数据库中数据的准确性和可靠性。以下是PostgreSQL中可用的常用约束。NOTNULLConstraint   -确保值不能为空UNIQUEConstraint     - 确保值唯一PRIMARYKey    ......
  • 无涯教程-PostgreSQL - Distinct语句
    PostgreSQLDISTINCT关键字与SELECT语句结合使用,可消除所有重复记录并仅提取唯一记录。Distinct-语法消除重复记录的DISTINCT关键字的基本语法如下-SELECTDISTINCTcolumn1,column2,.....columnNFROMtable_nameWHERE[condition]Distinct-示例考虑表 COMPANY ......
  • 无涯教程-PostgreSQL - With语句
    在PostgreSQL中,WITH查询提供了一种编写辅助语句以用于较大查询的方法,它有助于将复杂的大型查询分解为更易于阅读的更简单形式。WITH查询是CTE查询,在多次执行子查询时特别有用,代替临时表同样有用,它只计算一次聚合,并允许无涯教程在查询中按其名称引用它。在查询中使用它之前,必须......
  • 无涯教程-PostgreSQL - Order By语句
    PostgreSQLORDERBY子句用于根据一个或多个列以升序或降序对数据进行排序。OrderBy-语法ORDERBY子句的基本语法如下-SELECTcolumn-listFROMtable_name[WHEREcondition][ORDERBYcolumn1,column2,..columnN][ASC|DESC];您可以在ORDERBY子句中使用多个列......
  • 无涯教程-PostgreSQL - Limit语句
    PostgreSQLLIMIT子句用于限制SELECT语句返回的数量。LimitClause-语法带LIMIT子句的SELECT语句的基本语法如下-SELECTcolumn1,column2,columnNFROMtable_nameLIMIT[noofrows]以下是LIMIT子句与OFFSET子句一起使用时的语法-SELECTcolumn1,column2,columnN......
  • 无涯教程-PostgreSQL - 更新数据(Update)
    PostgreSQLUPDATE查询用于修改表中的现有记录,您可以将WHERE子句与UPDATE查询一起使用来更新选定的行,否则,将更新所有行。使用WHERE子句的UPDATE查询的基本语法如下-UPDATEtable_nameSETcolumn1=value1,column2=value2....,columnN=valueNWHERE[condition];您可以使用......
  • 无涯教程-PostgreSQL - AND&OR语句
    PostgreSQL的AND和OR运算符用于组合多个条件以缩小PostgreSQL语句中的选定数据。AND运算符AND运算符允许PostgreSQL语句的WHERE子句中存在多个条件,使用AND运算符时,当所有条件都为真时才通过。如,仅当condition1和condition2均为true时,[condition1]AND[condition2]才为tr......
  • 无涯教程-PostgreSQL - 表达式
    表达式(Expressions)是一个或多个值,运算符以及计算为一个值的PostgresSQL函数的组合。PostgreSQLEXPRESSIONS类似于公式,它们以查询语言编写,您还可以用于查询数据库以获取特定的数据集。考虑一下SELECT语句的基本语法,如下所示:SELECTcolumn1,column2,columnNFROMtable_na......