触发器的创建及相关知识

触发器的创建及相关知识

文章地址:http://www.cftea.com/specials/trigger/

1触发器的创建,删除和重命名都可以通过sql语句或者企业管理器来进行。
触发器是一种特殊的存储过程,类似于事件函数,SQL Server允许为 INSERT、UPDATE、DELETE 创建触发器,即当在表中插入、更新、删除记录时,触发一个或一系列 T-SQL语句。
2复杂一点的触发器应用
INSTEAD OF
执行触发器语句,但不执行触发触发器的 SQL 语句,比如试图删除一条记录时,将执行触发器指定的语句,此时不再执行 delete 语句。例:
create trigger f
on tbl
instead of delete
as
    insert into Logs…

IF UPDATE(列名)
检查是否更新了某一列,用于 insert 或 update,不能用于 delete。例:
create trigger f
on tbl
for update
as
    if update(status) or update(title)
        sql_statement –更新了 status 或 title 列

inserted、deleted
这是两个虚拟表,inserted 保存的是 insert 或 update 之后所影响的记录形成的表,deleted 保存的是 delete 或 update 之前所影响的记录形成的表。例:
create trigger tbl_delete
on tbl
for delete
as
    declare @title varchar(200)
    select @title=title from deleted
    insert into Logs(logContent) values(‘删除了 title 为:’ + title + ‘的记录’)
说明:如果向 inserted 或 deleted 虚拟表中取字段类型为 text、image 的字段值时,所取得的值将会是 null。
3查看当前数据库中有那些触发器
在查询分析器中运行:
select * from sysobjects where xtype=’TR’
sysobjects 保存着数据库的对象,其中 xtype 为 TR 的记录即为触发器对象。在 name 一列,我们可以看到触发器名称。
4查看触发器的内容
可以通过查询分析器运行 exec sp_helptext ‘触发器名称’
将会以表的样式显示触发器内容。
除了触发器外,sp_helptext 还可以显示 规则、默认值、未加密的存储过程、用户定义函数、视图的文本
或者通过用企业管理器查看
在表上点右键->“所有任务”->“管理触发器”,选择所要查看的触发器
5查看触发器的属性
存储过程 sp_helptrigger 用于查看触发器的属性。
sp_helptrigger 有两个参数:第一个参数为表名;第二个为触发器类型,为 char(6) 类型,可以是 INSERT、UPDATE、DELETE,如果省略则显示指定表中所有类型触发器的属性。
exec sp_helptrigger tbl
6多个触发器
触发器的名称不同,触发事件相同(INSERT、UPDATE、DELETE),我们称为多个触发器。
多个触发器之间的执行顺序并不确定。
我个人认为应该避免使用多个触发器,因为它不利于维护。
7触发器的回滚
例如
我们看到许多注册系统在注册后都不能更改用户名,但这多半是由应用程序决定的, 如果直接打开数据库表进行更改,同样可以更改其用户名,在触发器中利用回滚就可以巧妙地

实现无法更改用户名。
use 数据库名
go
create trigger tr
on 表名
for update
as
    if update(userName)
        rollback tran
关键在最后两句,其解释为:如果更新了 userName 列,就回滚事务。
8启用和禁用触发器
禁用:alter table 表名 disable trigger 触发器名称
启用:alter table 表名 enable trigger 触发器名称
9不能在触发器中使用的语句
触发器中可以使用大多数 T-SQL 语句,但如下一些语句是不能在触发器中使用的。
1,CREATE 语句,如:CREATE DATABASE、CREATE TABLE、CREATE INDEX 等。
2,ALTER 语句,如:ALTER DATABASE、ALTER TABLE、ALTER INDEX 等。
3,DROP 语句,如:DROP DATABASE、DROP TABLE、DROP INDEX 等。
4,DISK 语句,如:DISK INIT、DISK RESIZE。
5,LOAD 语句,如:LOAD DATABASE、LOAD LOG。
6,RESTORE 语句,如:RESTORE DATABASE、RESTORE LOG。
7,RECONFIGURE
8,说明:有人说不能用 TRUNCATE TABLE 语句,其实是可以的。

 

问题:1数据库用户及表的权限的相关知识
2表约束的相关知识

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/111064.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 红模仿在说谁(评价红模仿)

    各位读者,知识无穷而人力有穷,所以,要么改需求,要么找专业人士,要么自己研究。大家可以点赞、收藏、关注、评论我啦、需要完整文件随时联系我或交流哟~!

  • 遍历hashmap的三种方式_HashMap

    遍历hashmap的三种方式_HashMappublicstaticvoidmain(String[]args){Map<String,String>map=newHashMap();map.put(“aa”,”11″);map.put(“bb”,”22″);Set<String>set=map.keySet();Iteratoriter=set.iterator();while(iter.

    2022年10月28日
  • HDU 2896 病毒侵袭 AC自己主动机题解

    HDU 2896 病毒侵袭 AC自己主动机题解

  • ProgressDialog不显示

    ProgressDialog不显示一般用ProgressDialog来提示用户等待耗时操作,如图中代码块IsVideoQualityWithFace();如果不在单独线程中执行的话,ProgressDialog将不会显示 AlertDialog.Builderbuilder=newAlertDialog.Builder(context); builder.setTitle(“提示”) .setMessage

  • 小兔子跷跷板flash动画制作教程「建议收藏」

    小兔子跷跷板flash动画制作教程「建议收藏」 [1b]制作步骤:[/1b]  1、新建一个默认大小的Flash文档。先画天空背景,用矩形工具画一个矩形,在对齐面板中按下“相对于舞台”,再点“匹配宽和高”按钮,最后点“垂直中齐”和“水平中齐”按钮。与舞台对齐之后给矩形设置如下从白色到天蓝色的渐变,方式为“线性”。[img]/uploads/allimg/081209/2224570.jpg[/img] 图1   2、草…

  • navigator.appName

    navigator.appName找了很多的参考,无外乎两句话,兼容性和缅怀网景我就很好奇,到底在兼容什么然后翻到一篇外文的提问,里面提及了DOM0然后去了解了一下DOM0…看了介绍之后,就是不太推荐使用的标签监听属性on事件名,不过这文章有提到DOM0具有极好的跨浏览器优势,所以可能appName就是在这方面的支持吧,如果有知道的大佬请留个言,解释一下吧,老纠结了….

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号