一个触发器声明了当执行一种特定类型的操作时数据库应该自动执行一个特殊的函数。触发器可以被附加到表、视图和外部表。触发器经常用于做完整性约束,或者某种业务规则的约束。

1. 触发器的创建语法如下:

CREATE [CONSTRAINT] TRIGGER name
{ BEFORE | AFTER | INSTEAD OF } { event [ OR ...] }
ON table_name
[ FROM referenced_table_name ]
{[ NOT DEFERRABLE ][ DEFERRABLE ]{[ INITIALLY IMMEDIATE ][ INITIALLY DEFERRED]}}
[ FOR [ EACH ] { ROW | STATEMENT } ]
[ WHEN (condition) ]
EXECUTE PROCEDURE function_name ( arguments )

2. 触发器的创建步骤如下:

先为触发器创建一个执行函数,返回类型为触发器类型,然后创建相应的触发器。

3. 触发器的分类如下:

(1)语句级触发器:一条SQL语句,触发器只执行一次,即使是修改了零行数据的SQL,也会导致相应的触发器执行。

(2)行级触发器:每行发生变化,就会执行一次触发器。

(3)BEFORE触发器:在触发事件之前执行触发器。

(4)AFTER触发器:在触发事件之后执行触发器。

4. 触发器中的一些特殊变量如下:

(1)NEW

数据类型是RECORD;该变量为行级触发器中的INSERT/UPDATE操作保持新数据行。在语句级别的触发器以及DELETE操作,这个变量未被赋值。

(2)OLD

数据类型是RECORD;该变量为行级触发器中的UPDATE/DELETE操作保持新数据行。在语句级别的触发器以及INSERT操作,这个变量未被赋值。

(3)TG_NAME

数据类型是name;该变量包含实际触发的触发器名。

(4)TG_WHEN

数据类型是text;是值为BEFOREAFTERINSTEAD OF的一个字符串,取决于触发器的定义。

(5)TG_LEVEL

数据类型是text;是值为ROWSTATEMENT的一个字符串,取决于触发器的定义。

(6)TG_OP

数据类型是text;是值为INSERTUPDATEDELETETRUNCATE的一个字符串,它说明触发器是为哪个操作引发。

(7)TG_RELID

数据类型是oid;是导致触发器调用的表的对象 ID。

(8)TG_RELNAME

数据类型是name;是导致触发器调用的表的名称。现在已经被废弃,并且可能在未来的一个发行中消失。使用TG_TABLE_NAME替代。

(9)TG_TABLE_NAME

数据类型是name;是导致触发器调用的表的名称。

(10)TG_TABLE_SCHEMA

数据类型是name;是导致触发器调用的表所在的模式名。

(11)TG_NARGS

数据类型是integer;在CREATE TRIGGER语句中给触发器过程的参数数量。

(12)TG_ARGV[]

数据类型是text数组;来自CREATE TRIGGER语句的参数。索引从 0 开始记数。非法索引(小于 0 或者大于等于tg_nargs)会导致返回一个空值。

The End!

2017-08-17

最新文章

  1. Daily Scrum Meeting 汇总
  2. $.ajx的用法
  3. KMP算法精髓
  4. 9.Parameters
  5. [WebKit]浏览器的加载与页面性能优化
  6. Invert Binary Tree 解答
  7. C# WinForm程序退出的方法(转)
  8. 数据库还原失败System.Data.SqlClient.SqlError: 无法执行 BACKUP LOG,因为当前没有数据库备份
  9. hadoop学习笔记--集群搭建
  10. Effective Java 第三版——27. 消除非检查警告
  11. python之路--while, 格式化输出, 编码
  12. Ionic的页面堆栈与Tabs菜单相遇的问题(页面堆栈有多个)
  13. [内核驱动] VS2012+WDK 8.0 Minifilter实现指定扩展名文件拒绝访问
  14. cell设置背景颜色为啥不起作用
  15. FTDI通用转USB芯片简述
  16. mySQL 教程 第8章 视图
  17. Android技巧分享——Android开发超好用工具吐血推荐(转)
  18. openerp学习笔记 数据合法性约束(对象约束+数据库约束)
  19. ELK(Elasticsearch/Logstash/Kibana)安装时常见错误总结
  20. MYSQL分区表功能测试简析

热门文章

  1. C++标准库:bitset 用法整理&&zoj 3812
  2. MySQL大小写问题的简单说明(关键字/函数/表名)(转)
  3. Cisco IOU Web Interface : Web IOU
  4. mysql Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock’
  5. 符号变换引擎(Symbol Transform Engine - STE)
  6. vector实现
  7. docker Cannot start container [8] System error: exec format error
  8. 深入学习理解java-ThreadLocal
  9. iOS截取视频某一帧图片(关键帧,AVAssetImageGenerator)
  10. 深入理解MVC C#+HtmlAgilityPack+Dapper走一波爬虫 StackExchange.Redis 二次封装 C# WPF 用MediaElement控件实现视频循环播放 net 异步与同步