数据库12-触发器

第十二章 触发器

触发器定义:触发器是一种与表操作有关的数据库对象,当触发器所在表上出现指定事件时,将调用该对象,即表的操作事件触发表上的触发器的执行

触发器指令

  • 创建触发器语句:CREATE TRIGGER trigger_name trigger_time trigger_event ON tbl_name FOR EACH ROW trigger_stmt;

    • trigger_name:标识触发器名称,用户自行指定
    • trigger_time:标识触发时机,取值为 BEFORE 或 AFTER
    • trigger_event:标识触发事件,取值为 INSERT、UPDATE 或 DELETE
    • tbl_name:标识建立触发器的表名,即在哪张表上建立触发器
    • trigger_stmt:触发器程序体,可以是一句SQL语句,或者用 BEGIN 和 END 包含的多条语句
  • 可以创建的六种触发器

    • BEFORE INSERT、BEFORE UPDATE、BEFORE DELETE、AFTER INSERT、AFTER UPDATE、AFTER DELETE
    • 不能同时在一个表上建立2个相同类型的触发器,因此在一个表上最多建立6个触发器
  • 查看触发器:SHOW TRIGGERS [FROM schema_name];

  • 删除触发器:DROP TRIGGER [IF EXISTS] [schema_name.]trigger_name;

trigger_event详解

MySQL 除了对 INSERT、UPDATE、DELETE 基本操作进行定义外,还定义了 LOAD DATA 和 REPLACE 语句,这两种语句也能引起上述6中类型的触发器的触发

  • LOAD DATA语句:用于将一个文件装入到一个数据表中,相当于一系列的INSERT操作

  • REPLACE语句:一般来说和INSERT语句很像,只是在表中有primary key或unique索引时,如果插入的数据和原来primary key或unique索引一致时,会先删除原来的数据,然后增加一条新数据,也就是说,一条REPLACE语句有时候等价于一条INSERT 语句,有时候等价于一条DELETE语句加上一条INSERT语句

  • INSERT型触发器:插入某一行时激活触发器,可能通过 INSERT、LOAD DATA、REPLACE 语句触发

  • UPDATE型触发器:更改某一行时激活触发器,可能通过 UPDATE 语句触发

  • DELETE型触发器:删除某一行时激活触发器,可能通过 DELETE、REPLACE 语句触发

触发器的执行顺序

我们建立的数据库一般都是 InnoDB 数据库,其上建立的表是事务性表,也就是事务安全的。这时,若SQL语句或触发器执行失败,MySQL 会回滚事务,有:

  1. 如果 BEFORE 触发器执行失败,SQL 无法正确执行
  2. SQL 执行失败时,AFTER 型触发器不会触发
  3. AFTER 类型的触发器执行失败,SQL 会回滚
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: 如果你想从入门到精通学习PostgreSQL数据库,你可以按照以下步骤进行学习: 1. 首先,你需要安装和部署PostgreSQL数据库。你可以参考\[1\]中的指南来完成安装和部署的过程。 2. 接下来,你可以学习如何创建用户名和密码,并为用户赋予数据库权限。这可以通过参考\[1\]和\[2\]中的指南来完成。 3. 了解如何创建表和插入数据是学习数据库的重要一步。你可以参考\[1\]和\[2\]中的指南来学习如何创建表和插入数据。 4. 如果你想进一步扩展你的数据库技能,你可以学习如何安装wal2json插件。这个插件可以帮助你解析PostgreSQL数据库的日志。你可以参考\[1\]和\[2\]中的指南来学习如何安装wal2json插件。 总之,通过按照\[1\]和\[2\]中的指南逐步学习,你可以从入门到精通掌握PostgreSQL数据库的各个方面。另外,PostgreSQL还支持大部分SQL标准,并提供了许多其他现代特性,如复杂查询、外键、触发器、视图、事务完整性和MVCC。此外,你还可以通过增加新的数据类型、函数、操作符、聚集函数和索引来扩展PostgreSQL的功能\[3\]。希望这些信息对你有帮助! #### 引用[.reference_title] - *1* *2* [PostgreSQL数据库从入门到精通系列之一:安装部署PostgreSQL数据库、创建用户名和密码、创建表、插入数据](https://blog.csdn.net/zhengzaifeidelushang/article/details/131106138)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [PostgreSQL数据库从入门到精通](https://blog.csdn.net/weixin_33737134/article/details/87999898)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值