这是有声音的视频, 请检查耳机或者音箱 声音输出设备

教程使用 Oracle 11g Release 2 版本

内容:触发器TRIGGER - 介绍,创建,使用,级联(删除,插入和更新)

===============================================

触发器是一个特殊的存储过程。

区别就是在于, 存储过程需要去调用,而触发器无需调用,在执行某些操作的时候,会自动执行。

一般当表或者视图执行 增,删,改 操作的时候,就会自动执行触发器中的PL SQL 语句块。

还有一个区别, 创建触发器是不带参数的, 而 存储过程 可带可不带 参数。

===========================================
下面一个例子进行演示

数据库行级触发器 - 对每一行(每一条记录进行检查) 动作都触发 FOR EACH ROW

创建一个学生表:
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)');

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

当删除班级表的一个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

-----------------------------------------------------------
创建一个插入行级触发器
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 对应的。

------------------------------------------------------------
级联更新 同时涉及到 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;

==============================================

总结一下触发器: 主要是对 old.id 和 new.id 的理解,还有要注意触发器建立所在表的选择。

触发器其实还有其他分类, 不过都是类似的使用, 我就不介绍了, 视频到这里结束了,谢谢观看。88


“oracle_11gR2_12 触发器TRIGGER - 介绍,创建,使用,级联(删除,插入和更新)”没有评论

有任何疑问或建议,可以给作者留言:



公告:

  • 2010年5月之前的视频是文字解说演示,没有声音。
  • 2010年5月以后的视频全部带声音。