第七天、触发器的使用
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;
/
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架