1、触发器关键词:
trigger
2、概述:是一个特殊的储存过程(看做一个容器中可以限制一些操作)
3.作用:当执行DML(insert,update,delete)语句时,触发器会被自动触发,不能手动调用
4.触发器的使用场景:
#(1)可以限制数据的插入
#(2)可以限制数据的修改
#(3)可以限制数据的删除
#(4)重点:a.级联删除(同时删除主表和丛表) b.序列+触发器===》模拟自增长
语法(2322):
2: after before 2个触发器时间点
3: insert | update | delete 3个触发事件
2: 2个触发模式 语句级触发器模式 行级触发器模式
2: 2个伪表 :new : old
# 触发器使用语法(2322):
create or replace trigger 触发器名字
after | before
insert or update or delete on tableName
for each row
begin
(可执行模式,限制数据新增、修改、删除)
end;
===================================================================
例一:
--需求:创建一个触发器,限制学生:康康禁止插入
create or replace trigger t_demo1
after
insert on stuInfo
for each row
begin
--限制康康不能插入
if (:new.stuName = '康康') then
--错误窗口提示,阻止DML语句运行成功。raise_application_error(状态码,错误信息); 状态码范围: -20000 -20099
raise_application_error('-20001','康康不能插入,有污点');
end if;
end;
例二:
create or replace trigger t_demo3
after
insert or update or delete on stuInfo
for each row
begin
if inserting then
if(:new.stuName='廖俊杰') then
raise_application_error('-20004','廖俊杰不能新增');
elsif updating then
if(:old.stuName='康康2') then
raise_application_error('-20005','康康2不能删除');
elsif deleting then
if(:old.stuName='梅超风') then
raise_application_error('-20006','梅超风不能修改');
end;
=========================================================================
例一:
--实现功能:利用触发器实现删除主表的数据时,同时将从表的数据删除掉
select * from stuInfo;(主表)
select * from stuMarks;(丛表)
create or replace trigger t_demo4
after
delete on Stuinfo
for each row
begin
--当触发器被触发时,立刻获取触发器所在表的id 作为条件删除从表的数据
delete from stuMarks where stuMarks.Stuno = :old.stuno;
end;
例二:
--序列+触发器 模拟标识列
create or replace trigger t_emp
before
insert on new_emp
for each row
begin
--当触发器被触发时。获取到当前序列的下一个值,立即赋值给new_emp新表中的id属性
select s_emp.nextval into :new.empno from dual;
end;