发布网友 发布时间:2022-04-22 20:29
共3个回答
懂视网 时间:2022-05-04 05:15
触发器的简单应用 1.触发器和存储过程的区别 触发器是一个特殊的存储过程。区别就是在于,存储过程需要去调用,而触发器无需调用,在执行某些操作的时候,会自动执行。一般当表或者视图执行 增,删,改操作的时候,就会自动执行触发器中的PL SQL 语句块。还
触发器的简单应用
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;
热心网友 时间:2022-05-04 02:23
1.如果我更改了学生的学号,我希望他的借*录仍然与这个学生相关(也就是同时更改借*录表的学号);
2.如果该学生已经毕业,我希望删除他的学号的同时,也删除它的借*录。这时候可以用到触发器。
触发器(trigger)是个特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,比如当对一个表进行操作( insert,delete, update)时就会激活它执行。触发器经常用于加强数据的完整性约束和业务规则等。
触发器可以从 DBA_TRIGGERS ,USER_TRIGGERS 数据字典中查到。 数据库领域名词 触发器可以查询其他表,而且可以包含复杂的 SQL 语句。它们主要用于强*从复杂的业务规则或要求。例如:您可以根据客户当前的帐户状态,控制是否允许插入新订单。
触发器也可用于强制引用完整性,以便在多个表中添加、更新或删除行时,保留在这些表之间所定义的关系。然而,强制引用完整性的最好方法是在相关表中定义主键和外键约束。如果使用数据库关系图,则可以在表之间创建关系以自动创建外键约束。
热心网友 时间:2022-05-04 03:41
定义: 何为触发器?在SQL Server里面也就是对某一个表的一定的操作,触发某种条件,从而执行的一段程序。触发器是一个特殊的存储过程。