第七天、触发器的使用
7.触发器的使用
当数据库中的表发生增,删,改就会触发对应的触发器,然后执行相应的SQL语句
1.触发器的概述、分类
2.事务的概述
事务是数据库中重要的机制,用于确保数据完整性和并发处理性的能力。
它将一条或一组SQL语句当作成一个逻辑上的单元,用于保障这些语句都成功/失败。
事务的特性:ACID
A(Atomicity):原子性 当对某一个表进行操作的时候,增删改,不可分隔的。操作两个或两个以上的表的时候可能有一个成功一个不成功的可能,这样就产生了数据的不完整性。
C(Consistency):一致性
I(Isolation):隔离性 隔离等级
D(Durability):永久性 一旦回提交了就不能再回滚了,一旦回就不能再提交了
在ORACLE中执行DELETE做的操作是没有提交的。执行COMMIT就提交了,ROLLBACK则返回,回滚,回撤。
SELECT * FROM BOOKS FOR UPDATE;当我没有完成COMMIT,其它的用户就不成UPDATE.这就是加锁的过程。
3.行级触发器的工作原理
针对增删改而展开的。
SELECT * FROM emp;
SELECT * FROM deptment;
行级创建触发器:
CREATE OR REPLACE TRIGGER del_deptid
AFTER DELETE ON deptment
FOR EACH ROW
BEGIN
DELETE FROM emp WHERE id=:old.id;
END del_deptid;
/
插入触发器:
CREATE OR REPLACE TRIGGER insert_dept
AFTER INSERT ON deptment
FOR EACH ROW
BEGIN
INSERT INTO emp(eid,ename,id) values('','',:new.id);
END;
/
注:old.id,new.id OLD就是对做动作的表
INSERT动作时支持NEW,DELETE时支持OLD,UPDATE时支持OLD,NEW
CREATE OR REPLACE TRIGGER books_delete
AFTER DELETE ON books
FOR EACH ROW
BEGIN
IF :old.books_id='01'; THEN 不允许删除01的记录
RAISE_APPLICATION_ERROR(-200000,'不允许删除');
END IF;
END;
/
5.语句级触发器的设计应用
CREATE OR REPLACE TRIGGER dml_aa
AFTER INSERT OR REPLACE OR UPDATE
BEGIN
IF INSERTING THEN
INSERT INTO mylog values(user);
ELSE DELETING THEN
INSERT INTO mylog VALUES(USER);
END IF;
END;
/
CREATE OR REPLACE TRIGGER set_no
BEFORE INSERT ON auto
FOR EACH ROW
DECLARE
sn nummber(5);
BEGIN
SELECT myseq.nextval INTO sn FROM dual;
:NEW.a:=sn;
END;
/
6.替换触发器的应用 只能用在视图上
CREATE OR REPLACE TRIGGER tr
INSTEAD OF INSERT ON v
FOR EACH ROW
BEGIN
INSERT INTO de values(...);
INSERT INTO emp values(...);
END;
/