设为首页 加入收藏

TOP

触发器的简单应用
2014-11-24 03:31:11 来源: 作者: 【 】 浏览:1
Tags:触发器 简单 应用

触发器的简单应用

1.触发器和存储过程的区别

触发器是一个特殊的存储过程。区别就是在于,存储过程需要去调用,而触发器无需调用,在执行某些操作的时候,会自动执行。一般当表或者视图执行 增,删,改操作的时候,就会自动执行触发器中的PL SQL 语句块。还有一个区别, 创建触发器是不带参数的, 而存储过程可带可不带参数。

2.数据库行级触发器的应用

创建一个学生表:
CREATE TABLE xue_sheng( id integer, xing_ming varchar(25),xing_bie number, fen_shu number, b_id integer);

INSERT INTO xue_sheng VALUES(1,'ZhanSan',1,80,1);

INSERT INTO xue_sheng VALUES(2,'LiSi',1,90,2);

INSERT INTO xue_sheng VALUES(3,'ZhanHong',0,75,2);

INSERT INTO xue_sheng VALUES(4,'ChenXiaoMing',1,85,1);

创建一个班级表:
CREATE TABLE ban_ji( id integer , ban_ji varchar(25));

INSERT INTO ban_ji VALUES(1,'1-(1)');

INSERT INTO ban_ji VALUES(2,'1-(2)');

2.1创建一个删除行级触发器

当删除班级表的一个id , 那么它会自动把学生表所属的班级的学生也会删除

SQL> CREATE OR REPLACE TRIGGER del_ban_id
2 AFTER DELETE ON ban_ji
3 FOR EACH ROW
4 BEGIN
5 DELETE FROM xue_sheng where b_id=:old.id;
6 END;
7 /

DELETE FROM ban_ji where id=2;

查看,检查触发器是否自动执行了
select * from ban_ji;
select * from xue_sheng;

执行删除操作的时候, 建立一个 old内存表, old表和ban_ji表 结构完全一样

所以上面的 old.id 可以理解成 ban_ji班级表的 id

2.2创建一个插入行级触发器
SQL> CREATE OR REPLACE TRIGGER insert_ban_ji
2 AFTER INSERT ON ban_ji
3 FOR EACH ROW
4 BEGIN
5 INSERT INTO xue_sheng VALUES('5','test',0,83,:new.id);
6 END;
7 /

INSERT INTO ban_ji VALUES(3,'1-(3)');

查看,检查触发器是否自动执行了
select * from ban_ji;
select * from xue_sheng;

当插入数据时候,先插入到 new 表,new表和班级表结构也是一样的。 然后在插入到 真正的表,
所以 new.id 和 ban_ji班级表id 对应的。

2.3级联更新 同时涉及到 old.id 和 new.id

例如:我要更新班级表的班级id, 当然学生表的班级id也要同时更新

SQL> CREATE OR REPLACE TRIGGER update_ban_ji
2 AFTER UPDATE ON ban_ji
3 FOR EACH ROW
4 BEGIN
5 UPDATE xue_sheng SET b_id=:new.id WHERE b_id=:old.id;
6 END;
7 /

先查看一下原来2个表的数据
select * from xue_sheng;
select * from ban_ji;

然后更新班级表的id
UPDATE ban_ji SET id=8 WHERE id=1;

最后查看一下效果
select * from ban_ji;
select * from xue_sheng;

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇NoSQL世界还会有DBA存在吗 下一篇数据库中的事务、存储过程和触发..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·数据库:推荐几款 Re (2025-12-25 12:17:11)
·如何最简单、通俗地 (2025-12-25 12:17:09)
·什么是Redis?为什么 (2025-12-25 12:17:06)
·对于一个想入坑Linux (2025-12-25 11:49:07)
·Linux 怎么读? (2025-12-25 11:49:04)