必知必会的MySQL知识(触发器):索引--视图--触发器

触发器介绍|MySQL–触发器

当触发器所在表上出现INSERT、UPDATE、DETETE操作时,将激活触发器。触发器基于一个表创建,但是可以针对多个表进行操作,因此触发器可以用来对表实施复杂的完整性约束。
触发器具有以下优点。
(1)触发器可以自动执行。当对表进行INSERT、UPDATE、DELETE操作,试图修改表中的数据时,相应操作的触发器立即自动执行。
(2)触发器可以对数据库中相关表进行层叠更改。这比直接把代码写在前端的做法更安全合理。
(3)触发器可以实现表的约束实现不了的复杂约束。在触发器中可以引用其他表中的字段,从而实现多表之间的复杂约束。
(4)触发器可以维护冗余数据,实现外键级联等。

触发器代码|实例

创建触发器创建触发器用CREATE TRIGGER语句。CREATE TRIGGER语句的语法格式如下:

create trigger 触发器名
after/before   insert/update/delete on 表名
for each row 
    begin
	SQL语句;#触发程序
    end;

(1)触发器是数据库对象,因此创建触发器时,需要指定该触发器属于哪一个数据库。

(2)触发器是在表上创建的。这个表必须是基表,不能是临时表,也不能是视图。

(3)MySQL触发器的触发事件有三种:INSERT、UPDATE、DELETE。
• INSERT:将新记录插入表时激活触发程序。
• UPDATE:更改表中的记录时激活触发程序。
• DELETE:从表中删除记录时激活触发程序。

(4)触发器的触发时间有两种:
BEFORE和AFTER。BEFORE表示在触发事件发生之前执行触发程序,AFTER表示在触发事件发生之后执行触发程序。

(5)FOR EACH ROW表示行级触发器。
目前,MySQL仅支持行级触发器,不支持语句级别的触发器。
FOR EACH ROW表示INSERT、UPDATE、DELETE操作影响的每一条记录都会执行一次触发程序。
(6)触发程序中的SELECT语句不能产生结果集。
(7)触发程序中可以使用OLD关键字与NEW关键字。
• 向表中插入新记录时,在触发程序中可以使用NEW关键字表示新记录。当需要访问新记录中的某个字段时,可以使用“NEW.字段名”进行访问。
• 从表中删除某条旧记录时,在触发程序中可以使用OLD关键字表示删除的旧记录。当需要访问删除的旧记录中的某个字段时,可以使用“OLD.字段名”进行访问。
• 修改表中的某条记录时,在触发程序中可以使用NEW关键字表示修改后的记录,使用OLD关键字表示修改前的记录。当需要访问修改后的记录中的某个字段时,可以使用“NEW.字段名”进行访问。当需要访问修改前的记录中的某个字段时,可以使用“OLD.字段名”进行访问。
• OLD记录是只读的,在触发程序中只能引用它,不能更改它。在BEFORE触发程序中,可使用“SET NEW.字段名=值”更改NEW记录的值。但在AFTER触发程序中,不能使用“SET NEW.字段名=值”更改NEW记录的值。
• 对于INSERT操作,只有NEW关键字是合法的。对于DELETE操作,只有OLD关键字是合法的。对于UPDATE操作,NEW关键字和OLD关键字都是合法的。

触发器的使用

  1. 使用触发器实现检查约束在MySQL中,可以使用复合数据类型SET或ENUM对字段的取值范围进行检查约束,也可以实现对离散的字符串类型数据的检查约束。对于数值类型的字段,不建议使用SET或者ENUM数据类型实现检查约束,可以使用触发器实现。
    【例1】使用触发器实现检查约束,在向elective表插入记录时,score字段的值或者为空,或者取值0~100。如果score字段的值不满足要求,小于0则填入0,大于100则填入100。
    -----------------------------------------------未完待续
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

威威猫的栗子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值