=========================触发器=======================
触发器(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);