触发器的创建及相关知识

触发器的创建及相关知识

文章地址: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表约束的相关知识

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

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

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 如何找回被盗的微信号(百分百成功)[通俗易懂]

    如何找回被盗的微信号(百分百成功)[通俗易懂]见到这篇文章的小伙伴,可能是被领皮肤、送福利等诱导活动被走微信号,这帮不法分子把骗取你们的微信号,以300-1000不等价格卖给黑色产业链,如果不法分子利用你的微信号去做违法的事情,警察也会查到你,因为你的微信号是实名认证了的。如果你的微信号有钱财也会被盗刷走。(请大家保护好自己微信号,不要轻易把微信帐号+密码+手机等给别人)记住:只要是你的实名微信号,就一定可以找回来,现在小编就教大家如何找回第一步:骗子要求你卸载客户端申诉方法第二步:没有卸载微信客户端申诉方法第一步:这是卸载过微信客户端申诉

    2022年5月15日
  • PHP filemtime() 函数

    PHP filemtime() 函数

    2021年11月7日
  • Cover Letter & Response Letter

    Cover Letter & Response Letter1.CoverLetterCoverLetter是写给期刊编辑、用于描述投稿论文的创新与工作内容,明确地告知编辑稿件的研究内容与期刊刊物领域契合度,并作一些额外的陈述和声明(比如,不存在一稿多投的声明,投稿的期刊存在预印本的声明,推荐的审稿人等)。大部分期刊投稿的时候都会要求独立提交一份CoverLetter,或者是在投稿流程中有一个写给编辑的文本框,把CoverLetter的内容直接粘进去。CoverLetter的内容在于浓缩手稿的摘要、研究方法、研究结果和结论,需要简明扼要的表达出论

    2022年6月3日
  • 跨平台移动APP开发进阶(一):mui开发注意事项

    跨平台移动APP开发进阶(一):mui开发注意事项mui开发注意事项MuiHTML5开发框架mui是一个高性能的HTML5开发框架,从UI到效率,都在极力追求原生体验;这个框架自身有一些规则,刚接触的同学不很熟悉,特总结本文;想了解mui更详细的信息,请访问mui官网。DOM结构关于mui页面的dom,你需要知道如下规则:固定栏靠前所谓的固定栏,也就是带有.mui-bar(类选择器)属性的节点,都是基于fixed定位的元

    2022年5月31日
  • docker里镜像用ipv6无法访问_虚拟服务器端口设置

    docker里镜像用ipv6无法访问_虚拟服务器端口设置前言我有一个朋友,他在Dev和Test服务器用Docker搭建了Redis供项目使用,然后今天Test环境的Redis端口访问不通了,在服务上可以正常连接,真是离了个大齐,让我们试试排查排查问题;正文端口检测lsof已确认在本地用telnetip6381访问不通,那就上服务上看看端口情况DevTestDev环境同时映射到Ipv6和Ipv4端口,Test环境仅映射到Ipv6,那基本上就可以断定是环境问题了容器状态dockerps既然端口映射

    2022年8月31日
  • Ubuntu18.04安装PCL(详细教程)

    Ubuntu18.04安装PCL(详细教程)

    2020年11月8日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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