请问SQL触发器用在什么地方? ...求解...

触发器有什么好处和坏处.?具体怎么定义>>能不能写点代码,定义一个SQL触发器.!... 触发器有什么好处和坏处.?

具体怎么定义>>能不能写点代码,定义一个SQL 触发器.!
展开
 我来答
百度网友9514fc051
2008-11-28 · TA获得超过1920个赞
知道小有建树答主
回答量:849
采纳率:85%
帮助的人:396万
展开全部
先说触发器,再说好处和坏处
-------------------------------
触发器,主要是用来同步更新数据的,杂乱枯燥的文章不给你转了,看起来累,举个例子吧:

假设有两个表,tab_1 , tab_2
再假设两个表里都有“人员性别”这个字段

tab_1的数据例如: 张三```男```1978`````2002
tab_2的数据例如: 张三```男```销售科```科长

我要改tab_1中张三的性别为“女”的话,那么tab_2的性别也该改为“女”,对吧,总不能两张表的性别不同吧。

如果不用触发器的话,我们就要改完tab_1,再去改tab_2,使性别都变成女

于是这里可以用到触发器了:

原理是:当tab_1中某人的性别发生变更后,数据库自动将tab_2的性别进行同步修改

触发器也可以这样应用:
1、当删除tab_1中的某人信息时,触发器一并删除该人的tab_2中的数据
2、在tab_1中新插入一个人员时,触发器在tab_2中一并新增一条该人的数据

===================================================================================
所以在你建立触发器时,就要指定该触发器的用途,是同步更新,还是删除、插入,由你指定。

基本的语法规则是:
create trigger 触发器名称(你自己命名的) on 表 for 用途(delete|update|insert)
as
delete|update|insert语句
----------------------------------------------------------------------
例如:
create trigger tri_A on tab_1 FOR DELETE
AS
delete tab_2 from deleted where tab_2.id = deleted.id;

意思是:在tab_1表上,建立触发器(tri_A),用于删除该表的数据时触发一个事务,什么事务呢?——删除tab_2中的该编号人员的记录。

FOR INSERT、FOR UPDATE分别是建立用于“插入记录”、“更新数据”的触发器,例子里的FOR DELETE是用于触发“删除记录”的。

这里还要看清楚,那个delete语句中的表,是from deleted哦,还有,where子句的tab_2.id = deleted.id,不是tab_2.id = tab_1.id哦,deleted.id是指你刚删除的那条记录的id(而update、insert,都用inserted.id)
===================================================================================

好处:相对于外部程序、存储过程,触发器可以更快更高效的维护数据
坏处:(我自己的经验)触发器要用的恰到好处,一个大型应用里,触发器越少越好,触发器会使编程时源码的结构被迫打乱,为将来的程序修改、源码阅读带来很大不便。
百度网友dfaa21593
2008-11-28 · TA获得超过424个赞
知道答主
回答量:449
采纳率:0%
帮助的人:0
展开全部
触发器一般用到比如投票系统这些需要随即改编数据的地方,一个人投进1号票,数据库写下1号票,不过在写下的同事,另外一个表,也就是总票数这个数据在另一个表中也要改变,这时候我们就需要用触发器
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
nicholas_宝贝
2008-11-28 · TA获得超过134个赞
知道答主
回答量:235
采纳率:0%
帮助的人:0
展开全部
一楼得写的太详尽了
我都没补充的了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wanluo007
2008-11-28 · TA获得超过1123个赞
知道小有建树答主
回答量:836
采纳率:0%
帮助的人:773万
展开全部
触发器的主要用处是对满足条件的事件进行捕获,然后触发某些处理,
以下是联机帮助,其实很有作用的,^_^
CREATE TRIGGER 权限默认授予定义触发器的表所有者、sysadmin 固定服务器角色成员以及 db_owner 和 db_ddladmin 固定数据库角色成员,并且不可转让。
若要检索表或视图中的数据,用户必须在表或视图中拥有 SELECT 语句权限。若要更新表或视图的内容,用户必须在表或视图中拥有 INSERT、DELETE 和 UPDATE 语句权限。
如果视图中存在 INSTEAD OF 触发器,用户必须在该视图中有 INSERT、DELETE 和 UPDATE 特权,以对该视图发出 INSERT、DELETE 和 UPDATE 语句,而不管实际上是否在视图上执行了这样的操作。
示例
A. 使用带有提醒消息的触发器
当有人试图在 titles 表中添加或更改数据时,下例将向客户端显示一条消息。
说明 消息 50009 是 sysmessages 中的用户定义消息。有关创建用户定义消息的更多信息,请参见 sp_addmessage。
USE pubs
IF EXISTS (SELECT name FROM sysobjects
WHERE name = 'reminder' AND type = 'TR')
DROP TRIGGER reminder
GO
CREATE TRIGGER reminder
ON titles
FOR INSERT, UPDATE
AS RAISERROR (50009, 16, 10)
GO
呵呵,希望能有帮助,^_^
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式