oracle-触发器
1 create [or replace] tigger 触发器名 触发时间 触发事件 2 on 表名 3 [for each row] 4 begin 5 pl/sql语句 6 end
触发器能实现的功能
1. 允许/限制对表的修改
2. 自动生成派生列,比如自增字段
3. 强制数据一致性
4. 提供审计和日志记录
5. 防止无效的事务处理
6. 启用复杂的业务逻辑
触发器的删除
drop trigger trigger_name //其中trigger_name为触发器的名称
触发器的创建(pl/sql)
首先我们在数据库中创建一个表,用于练习。
之后打开plsql软件连上数据库,之后在左侧文件夹中找到triggers文件夹点击右键--新建,如图:
1. name:触发器的名字,根据要求起一个就可以。
2. fires:分为三种before,after,instead of
3. event:分为三种update,delete,insert
4. table or view:表名或视图名
注意:
1. trigger为触发器的标志。
2. before代表对表执行操作表之前触发。
3. 表名前面要加on关键字。
4. 此段代码的意思是不让周一操作表。
create or replace trigger test1 before insert on t_user--对表的添加操作 create or replace trigger test1 before insert or update or delete on t_user--对表的添加/修改/删除操作 begin if(to_char(sysdate,'DY') = '星期一') then raise_application_error(-20600,'不能在周一操作表t_user'); end if; end test1;
如果对表执行了操作动作,会提示以下信息。
触发器的应用
问题:使用触发器实现序号自增。此功能非常的常见,需要使用序列+触发器来共同实现,如果不了解序列的小伙伴百度一下就可以了。另外要说一下,mysql可以设置主键自增,就不用这么麻烦了。
1. 首先在创建表的时候在id列上加上主键,如果表已经创建好了,也可以通过语句后加上 alter table t_user add constraint PK_ID primary key (id);
2. 之后创建一个序列,注意创建序列的时候要保证数据的唯一性 id不允许重复,否则会报错。
1 create or replace trigger test2 before insert on t_user for each row 2 declare 3 nextid number; 4 begin 5 if :new.id is null or :new.id=0 then 6 select my_seq.nextval into nextid from sys.dual; 7 :new.id:=nextid;--:new表示新插入的那条记录 8 end if; 9 end test2;
之后 执行insert into t_user (name) values ('张三') 可以看到数据正常自增并被添加进入了