触发器是特殊的过程,特殊之处在于会自动调用,触发器不能带参数。
事务的四个特性:Atomicity 原子性
Consistency 一致性
Isolation 隔离性
Durability 永久性
select * from emp for update; //加锁,除非提交,否则其他用户不能操作。
/*创建触发器,级联删除*/
create or replace trigger del_deptno
after delete on dept
for each row
begin
delete from emp where deptno=:old.deptno;
end del_dptno;
/
内存中的逻辑表
old
new
/*创建触发器,new和old示例,级联更新*/
create or replace trigger update_dept
after update on dept
for each row
begin
update emp set deptno=:new.deptno where deptno=:old.deptno;
end;
/
/*触发器里面不允许写rollback等操作*/
/*以上都是行级触发器,下面的是语句级触发器*/
/*创建语句级触发器*/
/*create table mylog(curr_user varchar2(50),curr_date date,act char(1));*/
create or replace trigger dml_emp
after insert or delete or update on emp
begin
if inserting then
insert into mylog values(user,sysdate,'I');
elsif deleting then
insert into mylog values(user,sysdate,'D');
else
insert into mylog values(user,sysdate,'U');
end if;
end;
/
/*利用触发器实现自增*/
create or replace trigger set_id
before insert on auto
for each row
declare
sn number(4);
begin
select myseq.nextval into sn from dual;
:new.id:=sn;
end;
/
/*替换触发器*/
create or replace trigger tr_view_emp_dept
instead of insert on v_emp_dept
for each row
begin
insert into dept(deptno,dname) values(:new.deptno,:new.dname);
insert into emp(empno,ename,deptno) values(:new.empno,:new.ename,:new.deptno);
end;
/
/*create or replace view v_emp_dept
as
select empno,ename,dept.deptno,dept.dname from emp,dept where emp.deptno=dept.deptno;*/
/*insert into v_emp_dept values (7966,'XIAKUN',66,'A4614');*/