Mysql数据库基本知识六:触发器和关系化等理论

=========================触发器=======================
触发器(trigger)是一类特殊的存储过程。

【特殊性】体现在:
1.针对特定的表;
2.不能接收和传递参数;
3.只能被动响应,不能主动触发;

【触发器的要素】
触发对象:触发器所针对的对象(也就是触发事件所在的表)
触发事件:引起触发器被触发的事件,有三种, INSERT、UPDATE和DELETE。
触发时间:即该触发器是在触发事件发生之前(BEFORE)还是之后(AFTER)触发
触发条件:只有满足触发条件触发器才会启动
触发操作:触发器启动后执行的操作

【触发器的触发时间】有两种:before与after。
before表示在触发事件发生之前执行触发程序。
after表示在触发事件发生之后执行触发器。

【触发器的作用】:
触发器是实现复杂数据处理和增强数据完整性的有效机制。
1.实现CHECK约束
2.维护冗余数据;
3. 数据在所有相关表中的级联选项;

【触发器的相关命令】:
1.使用show triggers命令查看所有的触发器。
2.使用show create trigger  触发器名 命令可以查看某一个触发器的定义。
3.使用drop trigger 触发器名语句将该触发器删除

【语法】:
create trigger 触发器名 触发时间 触发事件 on 表名 
for each row
begin
触发程序(触发操作,触发器被激活后执行的操作)
end

1,指明在某张表的某一种触发事件之前或之后激活的触发器。
2,指定行级触发器。 for each row
3,在begin...end语句块中定义触发程序。

【new,old关键字/对象/临时表】是容器,用来装触发事件对应的数据。
insert插入对应的数据装到new里
delete删除对应的数据放在old里
update 修改后的新记录在new里 ;修改前的旧纪录在old里

【例1】:使用触发器实现检查约束,确保课程的人数上限up_limit字段值在(60,150,230)范围内。
create trigger t1 before insert on course
for each row
begin
if new.climit<>60 and new.climit<>150 and new.climit<>230 then
signal sqlstate 'HY000' 
set message_text='取值不对,重新输入!';
end if;
end;
INSERT INTO course values('c99','aaaa',4,60);

=========================触发器=======================
触发器(trigger)是一类特殊的存储过程。

【特殊性】体现在:
1.针对特定的表;
2.不能接收和传递参数;
3.只能被动响应,不能主动触发;

【触发器的要素】
触发对象:触发器所针对的对象(也就是触发事件所在的表)
触发事件:引起触发器被触发的事件,有三种, INSERT、UPDATE和DELETE。
触发时间:即该触发器是在触发事件发生之前(BEFORE)还是之后(AFTER)触发
触发条件:只有满足触发条件触发器才会启动
触发操作:触发器启动后执行的操作

【触发器的触发时间】有两种:before与after。
before表示在触发事件发生之前执行触发程序。
after表示在触发事件发生之后执行触发器。

【触发器的作用】:
触发器是实现复杂数据处理和增强数据完整性的有效机制。
1.实现CHECK约束
2.维护冗余数据;
3. 数据在所有相关表中的级联选项;

【触发器的相关命令】:
1.使用show triggers命令查看所有的触发器。
2.使用show create trigger  触发器名 命令可以查看某一个触发器的定义。
3.使用drop trigger 触发器名语句将该触发器删除

【语法】:
create trigger 触发器名 触发时间 触发事件 on 表名 
for each row
begin
触发程序(触发操作,触发器被激活后执行的操作)
end

1,指明在某张表的某一种触发事件之前或之后激活的触发器。
2,指定行级触发器。 for each row
3,在begin...end语句块中定义触发程序。

【new,old关键字/对象/临时表】是容器,用来装触发事件对应的数据。
insert插入对应的数据装到new里
delete删除对应的数据放在old里
update 修改后的新记录在new里 ;修改前的旧纪录在old里

【例1】:使用触发器实现检查约束,确保课程的人数上限up_limit字段值在(60,150,230)范围内。
create trigger t1 before insert on course
for each row
begin
if new.climit<>60 and new.climit<>150 and new.climit<>230 then
signal sqlstate 'HY000' 
set message_text='取值不对,重新输入!';
end if;
end;
INSERT INTO course values('c99','aaaa',4,60);

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值