1.触发器
触发器(trigger)是SQL server 提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,比如当对一个表进行操作( insert,delete, update)时就会激活它执行。触发器经常用于加强数据的完整性约束和业务规则等。 触发器可以从 DBA_TRIGGERS ,USER_TRIGGERS 数据字典中查到。SQL3的触发器是一个能由系统自动执行对数据库修改的语句。保证数据完整性。
2.新建表
假设系统中有两个表:
班级表 class(班级号 classID, 班内学生数 stuCount)
学生表 student(学号 stuID, 所属班级号 classID)
要创建触发器来使班级表中的班内学生数随着学生的添加自动更新,代码如下:
DELIMITER $
create trigger tri_stuInsert after insert
on student for each row
begin
declare c int;
set c =(select 班内学生数 from class where 班级号=3);
update class set 班内学生数 =c+1 where 班级号 =3;
end$
DELIMITER ;
DELIMITER $
create trigger tri_stuInsert1 after DELETE
on student for each row
begin
declare c int;
set c=(select 班内学生数 from class where 班级号=3);
update class set 班内学生数=c-1 where 班级号 =3;
end$
DELIMITER ;
DELETE from student WHERE 学号=1
DELIMITER $
create trigger tri_stuInsert2 after
on student for each row
begin
declare c int;
set c=(select 班内学生数 from class where 班级号=3);
update class set 班内学生数=c-1 where 班级号 =3;
end$
DELIMITER ;
insert into student(学号,所属班级)VALUES(3,3);
触发器(trigger)是SQL server 提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,比如当对一个表进行操作( insert,delete, update)时就会激活它执行。触发器经常用于加强数据的完整性约束和业务规则等。 触发器可以从 DBA_TRIGGERS ,USER_TRIGGERS 数据字典中查到。SQL3的触发器是一个能由系统自动执行对数据库修改的语句。保证数据完整性。
2.新建表
假设系统中有两个表:
班级表 class(班级号 classID, 班内学生数 stuCount)
学生表 student(学号 stuID, 所属班级号 classID)
要创建触发器来使班级表中的班内学生数随着学生的添加自动更新,代码如下:
DELIMITER $
create trigger tri_stuInsert after insert
on student for each row
begin
declare c int;
set c =(select 班内学生数 from class where 班级号=3);
update class set 班内学生数 =c+1 where 班级号 =3;
end$
DELIMITER ;
DELIMITER $
create trigger tri_stuInsert1 after DELETE
on student for each row
begin
declare c int;
set c=(select 班内学生数 from class where 班级号=3);
update class set 班内学生数=c-1 where 班级号 =3;
end$
DELIMITER ;
DELETE from student WHERE 学号=1
DELIMITER $
create trigger tri_stuInsert2 after
on student for each row
begin
declare c int;
set c=(select 班内学生数 from class where 班级号=3);
update class set 班内学生数=c-1 where 班级号 =3;
end$
DELIMITER ;
insert into student(学号,所属班级)VALUES(3,3);