问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

触发器什么时候使用?有什么功能?

发布网友 发布时间: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里面也就是对某一个表的一定的操作,触发某种条件,从而执行的一段程序。触发器是一个特殊的存储过程。
常见的触发器有三种:分别应用于Insert , Update , Delete 事件。(SQL Server 2000定义了新的触发器,这里不提)

我为什么要使用触发器?比如,这么两个表:

Create Table Student( --学生表
StudentID int primary key, --学号
....
)

Create Table BorrowRecord( --学生借*录表
BorrowRecord int identity(1,1), --流水号
StudentID int , --学号
BorrowDate datetime, --借出时间
ReturnDAte Datetime, --归还时间
...
)

用到的功能有:
1.如果我更改了学生的学号,我希望他的借*录仍然与这个学生相关(也就是同时更改借*录表的学号);
2.如果该学生已经毕业,我希望删除他的学号的同时,也删除它的借*录。
等等。

这时候可以用到触发器。对于1,创建一个Update触发器:

Create Trigger truStudent
On Student --在Student表中创建触发器
for Update --为什么事件触发
As --事件触发后所要做的事情
if Update(StudentID)
begin

Update BorrowRecord
Set StudentID=i.StudentID
From BorrowRecord br , Deleted d ,Inserted i --Deleted和Inserted临时表
Where br.StudentID=d.StudentID

end

理解触发器里面的两个临时的表:Deleted , Inserted 。注意Deleted 与Inserted分别表示触发事件的表“旧的一条记录”和“新的一条记录”。 一个数据库系统中有两个虚拟表用于存储在表中记录改动的信息,分别是:
虚拟表Inserted 虚拟表Deleted在表记录新增时 存放新增的记录 不存储记录
修改时 存放用来更新的新记录 存放更新前的记录
删除时 不存储记录 存放被删除的记录
一个Update 的过程可以看作为:生成新的记录到Inserted表,复制旧的记录到Deleted表,然后删除Student记录并写入新纪录。

对于2,创建一个Delete触发器
Create trigger trdStudent
On Student
for Delete
As
Delete BorrowRecord
From BorrowRecord br , Delted d
Where br.StudentID=d.StudentID

从这两个例子我们可以看到了触发器的关键:A.2个临时的表;B.触发机制。
这里我们只讲解最简单的触发器。复杂的容后说明。
事实上,我不鼓励使用触发器。触发器的初始设计思想,已经被“级联”所替代
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
正月里剪头死舅舅这一说法影响太大了,像我这样一个月至少要剪两次头的... 夏季钓黄尾鱼用什么饵料? 夏季什么时候最好钓黄尾 夏季钓黄尾有哪些技巧 win10重置系统如何保留个人文件 win10重装系统怎么保留个人文件 驾驶证处理机关3205850100.是哪个省份的代码,跪求各路大神帮忙,要处理... 江苏省苏州市太仓市交通违章处理需要递交的材料是哪些 南通牌照在江苏省太仓市郑和中路违章可以在太仓市车管所交了罚款扣分... 对于太仓市违章处理在哪里 太仓市违章处理到哪里办理? 怎样在QQ上和朋友和好? 什么是触发器,它的作用是什么? 如何在不问对方QQ密码的前提下登上对方的好? 触发器是干什么用的,有什么作用。 自己怎么设置QQ上面好的头像啊? 如何复制qq好友到另一新qq上? 请问,怎么样才能把这个QQ号码的好友(很多)转到另一个QQ上面,不要一个一个加, 怎样克隆另一个QQ上的好友 怎样可以将一个QQ上的好友,全部加在另一个QQ上? 怎么办其他QQ好的表情挪到另一个QQ上 咋克隆好友到另一个QQ好上面地? 怎样把一个QQ的好友复制到另一个QQ上面。 怎么样把QQ上的好友搬到另一个QQ上呢? 女生来大姨妈能吃柚子不 怎样把QQ上面的好朋友移到另外一个QQ上 如何将一个QQ上的好友复制到另一个QQ上 女生来大姨妈能吃柚子吗 怎么将一个qq号上的好友全部添加到另一个号上? 来大姨妈可以吃柚子吗柚子 低脂高蛋白食物排行榜 怎么才能上好QQ 触发器什么时候使用?有什么功能?举个简单的例子说明一下。 数据库中触发器的作用是什么? 数据库中触发器重要的功能是什么? 触发器有哪几种?主要功能是什么? 触发器的工作原理是什么? 各类触发器的特点 触发器的基本逻辑功能? D触发器和JK触发器的逻辑功能和触发方式有何不同? 380V的电压,那一千瓦等于多少安? 苹果手机,自拍完以后,照片左右颠倒了怎么调呢? 380v1千瓦多少电流? iphone8自拍出来是左右相反的,怎么调? 380V电压一个千瓦的运行电流是多少 iphone自拍照左右相反 1千瓦电流 电压是380V时 是多少安 微信怎么远程登录电脑版 苹果手机拍照怎么左右是反的? 苹果手机自拍的时候左右是反的,怎么设置能不反? 如何让老公远程扫码登录我的电脑微信