zoukankan      html  css  js  c++  java
  • 触发器的创建及相关知识

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

  • 相关阅读:
    强制ubuntu登陆用户退出
    命令行设置ubuntu 无密码自动登陆
    docker 添加普通用户权限
    CMake配置工程链接库
    配置glibc
    编译sfml
    GNOME设置快捷键
    设置jetson nano VNC
    深度学习中的基本概念——评价指标相关
    行为识别
  • 原文地址:https://www.cnblogs.com/sutengcn/p/982286.html
Copyright © 2011-2022 走看看