mysql触发器插入判断_SQL语言基础:触发器相关知识介绍

本文介绍了SQL触发器的基础知识,包括触发器的触发时机、分类及创建方法。触发器用于在数据库表中数据发生变化时执行特定任务,确保数据完整性和业务规则。内容涵盖行级和语句级触发器,以及如何创建、更改和删除触发器的语法示例。
摘要由CSDN通过智能技术生成
[{after|before}]"],[20,"\n","24:\"nb9j\""],[20,"{[delete|update|updateof[列名清单]]}"],[20,"\n","24:\"Nyh6\""],[20,"on 表名"],[20,"\n","24:\"pJi9\""],[20,"[referencing ]"],[20,"\n","24:\"kyZz\""],[20,"[when]"],[20,"\n","24:\"Tduk\""],[20,"begin"],[20,"\n","24:\"zfpU\""],[20,""],[20,"\n","24:\"kRCD\""],[20,"end [触发器]"],[20,"\n","24:\"TOqf\""],[20,"参数说明:"],[20,"\n","24:\"4Kza\""],[20,"before:说明DBMS在执行触发语句之前激发触发器。"],[20,"\n","24:\"OVT7\""],[20,"after:说明DBMS在执行触发语句之后激发触发器。"],[20,"\n","24:\"quBM\""],[20,"delete:delete触发器,每当一个delete语句从表中删除一行时激发触发器。"],[20,"\n","24:\"9KbT\""],[20,"insert:insert,每当一个insert语句从表中插入一行时激发触发器。"],[20,"\n","24:\"8ciU\""],[20,"update:update触发器,每当update语句修改由of子句指定的列值时激发触发器。如果忽略of子句,表示任何列值时,DBMS都将激发触发器。"],[20,"\n","24:\"mRB9\""],[20,"referencing :指定临时视图的别名。在触发器运行过程中,系统会生成两个临时视图,分别存放更新值(旧值)、更新后的值(新值)。"],[20,"\n","24:\"X0yf\""],[20,"行级触发器:默认临时视图名分别时OLD、NEW。"],[20,"\n","24:\"VnKn\""],[20,"语句触发器:默认临时视图名分别时OLD-TABLE、NEW-TABLE。触发器结束临时视图也会随着销毁。"],[20,"\n","24:\"DIQT\""],[20,"WHEN:指定触发器的触发条件。只有条件满足触发条件时,才会激发触发器。触发条件必须包含临时视图名、不包含查询。"],[20,"\n","24:\"hPj5\""],[20,"针对示警或满足特定条件下自动执行某项任务来说,触发时非常有用的机制。"],[20,"\n","24:\"YIZI\""],[20,"5、更改触发器"],[20,"\n","24:\"OjrR\"|32:1"],[20,"语法格式:"],[20,"\n","24:\"cN56\""],[20,"alter trigger [{after|before}]"],[20,"\n","24:\"SrRR\""],[20,"{[delete|update|updateof[列名清单]]}"],[20,"\n","24:\"b3I1\""],[20,"on 表名"],[20,"\n","24:\"UVjZ\""],[20,"[referencing ]"],[20,"\n","24:\"tMZP\""],[20,"[when]"],[20,"\n","24:\"Urdr\""],[20,"begin"],[20,"\n","24:\"izi2\""],[20,"\t要执行的SQL语句"],[20,"\n","24:\"aQqQ\""],[20,"end"],[20,"\n","24:\"Zpd8\""],[20,"6、删除触发器"],[20,"\n","24:\"8aqC\"|32:1"],[20,"drop trigger [,...n]"],[20,"\n","24:\"b72L\""],[20,"说明:n表示可以指定多个触发器的占位符。"],[20,"\n","24:\"FLm7\""],[20,"7、完整示例"],[20,"\n","24:\"iNGv\"|32:1"],[20,"- 需求: 当向员工表插入一条记录时,希望mysql自动同时往日志表插入数据"],[20,"\n","24:\"SwZX\""],[20,"-- 创建触发器(添加)"],[20,"\n","24:\"EmKN\""],[20,"CREATE TRIGGER tri_empAdd AFTER INSERT ON employee FOR EACH ROW    -- 当往员工表插入一条记录时"],[20,"\n","24:\"5wY7\""],[20,"\tINSERT INTO test_log(content) VALUES('员工表插入了一条记录');"],[20,"\n","24:\"Od4b\""],[20,"CREATE TRIGGER tri_empUpd AFTER UPDATE ON employee FOR EACH ROW    -- 当往员工表修改一条记录时"],[20,"\n","24:\"aVlI\""],[20,"    INSERT INTO test_log(content) VALUES('员工表修改了一条记录');\t"],[20,"\n","24:\"P5r2\""],[20,"CREATE TRIGGER tri_empDel AFTER DELETE ON employee FOR EACH ROW    -- 当往员工表删除一条记录时"],[20,"\n","24:\"qldw\""],[20,"    INSERT INTO test_log(content) VALUES('员工表删除了一条记录');\t "],[20,"\n","24:\"zVme\""],[20,"-- 删除创建触发器 "],[20,"\n","24:\"dKn0\""],[20,"DROP TRIGGER tri_empAdd;\t "],[20,"\n","24:\"emoa\""],[20,"触发器事件:数据库表行的插入、删除、修改。也就是执行insert、delete、update语句。"],[20,"\n","24:\"yII0\""]]">

       e4bbb6da18c1d475dca3fdeec8c1a5fc.png      

1、触发器 Trigger介绍

触发器可以实现完整性规则和保证一些复杂业务规则的实施。针对示警或满足特定 条件下自动执行某项任务来说,触发器是十分有用的机制。触发器是由事件1驱动的特殊过程,一旦由某个用户定义,任何用户对该触发器指定的数据新增、删除、修改操作,系统会自动激活相应的触发器,在核心层进行集中的完整性控制。

2、触发器特点

1) 当数据库开发者声明事件发生时,触发器激活,事件可以是对某个特定关系的插入、删除、更新。

2) 触发器被事件激活后,不是立即执行,而是先由触发器测试触发条件,若条件不成立,响应该事件的触发器将不做任何处理。

3) 如果触发器的申明条件满足时,则与该触发器相连的动作由DBMS执行。可以阻止事件、撤销事件。

注意事项:

1)触发器为数据库对象时,创建触发器必须指定名称、在其定义触发器的表、触发器触发时机、触发器做什么事情。触发器不能作用在临时表,但可以引用临时表。

3、触发器分类

行级触发器:对事件影响的每一行(FOR EACH ROW) ,每一元组执行。

语句级触发器:对整个事件只执行一次触发过程(FOR EACH STATEMENT)。是触发器默认方式。

4、创建触发器

触发器定义包括:触发器的触发事件、触发器执行的动作。针对update操作中还可以指定特定的属性或属性组的修改为触发条件。事件的触发还有两个相关时间:before、after。

  • before:触发器是在事件发生之前触发。

  • after:触发器是在事件发生之后触发。

创建触发器语法格式:

create trigger [{after|before}]{[delete|update|updateof[列名清单]]}on 表名[referencing ][when]beginend [触发器]

参数说明:

  • before:说明DBMS在执行触发语句之前激发触发器。

  • after:说明DBMS在执行触发语句之后激发触发器。

  • delete:delete触发器,每当一个delete语句从表中删除一行时激发触发器。

  • insert:insert,每当一个insert语句从表中插入一行时激发触发器。

  • update:update触发器,每当update语句修改由of子句指定的列值时激发触发器。如果忽略of子句,表示任何列值时,DBMS都将激发触发器。

  • referencing :指定临时视图的别名。在触发器运行过程中,系统会生成两个临时视图,分别存放更新值(旧值)、更新后的值(新值)。

  • 行级触发器:默认临时视图名分别是OLD、NEW。

  • 语句触发器:默认临时视图名分别是OLD-TABLE、NEW-TABLE。触发器结束临时视图也会随着销毁。

  • WHEN:指定触发器的触发条件。只有条件满足触发条件时,才会激发触发器。触发条件必须包含临时视图名、不包含查询。

  • 针对示警或满足特定条件下自动执行某项任务来说,触发是非常有用的机制。

5、更改触发器

语法格式:

alter trigger  [{after|before}]{[delete|update|updateof[列名清单]]}on 表名[referencing ][when]begin  要执行的SQL语句end

6、删除触发器

drop trigger [,...n]

说明:n表示可以指定多个触发器的占位符。

7、完整示例

- 需求:当向员工表插入一条记录时,希望mysql自动同时往日志表插入数据-- 创建触发器(添加) -- 当往员工表插入一条记录时CREATE TRIGGER tri_empAdd AFTER INSERT ON employee FOR EACH ROW   INSERT INTO test_log(content) VALUES('员工表插入了一条记录');-- 当往员工表修改一条记录时CREATE TRIGGER tri_empUpd AFTER UPDATE ON employee FOR EACH ROW    INSERT INTO test_log(content) VALUES('员工表修改了一条记录');-- 当往员工表删除一条记录时CREATE TRIGGER tri_empDel AFTER DELETE ON employee FOR EACH ROW    INSERT INTO test_log(content) VALUES('员工表删除了一条记录');   -- 删除创建触发器 DROP TRIGGER tri_empAdd;

触发器事件:数据库表行的插入、删除、修改。也就是执行insert、delete、update语句。

IT技术分享社区

个人博客网站:https://programmerblog.xyz

09c5682a96f06acd760c765d9bc36b09.png

文章推荐 程序员效率:画流程图常用的工具 程序员效率:整理常用的在线笔记软件 远程办公:常用的远程协助软件,你都知道吗? 51单片机程序下载、ISP及串口基础知识 硬件:断路器、接触器、继电器基础知识
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值