触发器的创建及相关知识

触发器的创建及相关知识

文章地址: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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • unity3d用python语言_Unity开发使用什么语言?要掌握什么?

    Unity开发使用什么语言?要掌握什么呢?不管是开发的哪个行业都是要先从语言开始学习起的,要学会unity的话肯定是要先知道它的开发语言是哪些的,所以今天这篇文章粤嵌科技的小编就会以着两个方面为重点来和大家讲解下。Unity用什么语言开发比较好1、对于Unity相信很多人多不陌生,用一句话来描述就是:Unity是游戏引擎、游戏开发工具。支持的维度3D,2D,可以进行3D,2D游戏开发。对编程有所认…

    2022年4月14日
    137
  • pytest skipif_pytest conftest.py文件

    pytest skipif_pytest conftest.py文件前言pytest.mark.skip可以标记无法在某些平台上运行的测试功能,或者您希望失败的测试功能Skip和xfail:处理那些不会成功的测试用例你可以对那些在某些特定平台上不能运行的测试用

    2022年7月30日
    5
  • list-style

    list-style

    2021年9月20日
    53
  • 从入门到精通,Java学习路线导航(附学习资源)

    引言最近也有很多人来向我”请教”,他们大都是一些刚入门的新手,还不了解这个行业,也不知道从何学起,开始的时候非常迷茫,实在是每天回复很多人也很麻烦,所以在这里统一作个回复吧。Java学习路线当然,这里我只是说Java学习路线,因为自己就是学Java的,对Java理当很熟悉,对于其它方面,我也不是很了解。基础阶段首先是基础阶段,在基础阶段,我们必须掌握Java基础,Mysql数据库,Ora…

    2022年4月12日
    45
  • Springboot自动装配原理_一体细针阀原理

    Springboot自动装配原理_一体细针阀原理1.什么是SpringBoot?  对于spring框架,我们接触得比较多的应该是springmvc、和spring。而spring的核心在于IOC(控制反转对于spring框架来说,就是由spring来负责控制对象的生命周期和对象间的关系)和DI(依赖注入IoC的一个重点是在系统运行中,动态的向某个对象提供它所需要的其他对象。这一点是通过DI(DependencyInjection,依赖注入)来实现的。比如对象A需要操作数据库,以前我们总是要在A中自己编写代码来获得一个Connection对象,有了

    2022年8月20日
    3
  • C++的this指针

    C++的this指针C++的this指针当你进入一个房子后,你可以看见桌子、椅子、地板等,但是房子你是看不到全貌了。对于一个类的实例来说,你可以看到它的成员函数、成员变量,但是实例本身呢?this是一个指针,它时时刻刻指向你这个实例本身。C++在初始化对象时,每个对象中的数据成员都会得到系统分配的自己独立的存储空间。对于成员函数来说,一个函数的代码段在内存中只有一份,同一个类中的不同对象在调用自己的成…

    2022年5月16日
    33

发表回复

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

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