【SQL SERVER】触发器(二)
2013-12-11 19:12
99 查看
前言:上面一片文章整理了触发器的基础知识点,下面我们看看如何使用触发器以及insert和delete表;
这里我们补充一下触发器的缺点:
性能较低。我们在运行触发器时,系统处理的大部分时间花费在参照其它表的处理上,这些表既不在内存中也不在数据库设备上,而删除表delete和插入表insert总是位于内存中。
具有隐藏性,增加了系统的复杂性,一般情况下理解起来会有困难,因为它不执行我们根本感觉不到。
触发器是一种特殊的存储过程,很多人认为触发器能实现的存储过程也能实现,而且触发器在性能上也没有很大的提升,建议不要用触发器,其实大家在处理业务的时候各有各的想法和解决问题的办法。下面我们看一下两个特殊的逻辑表:
一、Insert表和Delete表
在执行触发器时,系统创建两个特殊的逻辑表,Insert和Delete表,这两个表是由系统管理和维护的,存储在内存中,而不是存储在数据库中,因此我们没办法对其修改。这两个表是和被触发器作用的表具有相同的表结构,而且是动态驻留在内存中,一旦触发器执行完毕,那么这两个表随之被删除。总的来说,这两个表主要保存因用户操作而被影响到的原数据值和新数据值。
1、Insert表:存放由于执行Insert或Update语句要从表插入的所有行,当执行Insert或Update语句时,新的行同时被添加到触发器的表中和Insert表中。
2、Delete表:存放由于执行Delete或Update语句要从表中删除的所有行。当执行Delete或Update语句时,被删除的行会从被激活的触发器中移动到Delete表中。
被Update语句触发的触发器会创建Insert表和Delete表。
二、使用触发器
先在数据库创建一个表
1、对表employee创建触发器
执行后得到以下效果
例2、当对定义了删除型触发器的employee表进行删除操作时,首先检查删除几行,如果删除多行则返回提示信息,并回滚。
当删除一行时被触发。
上面是一些触发器的操作整理,希望对你有帮助!
这里我们补充一下触发器的缺点:
性能较低。我们在运行触发器时,系统处理的大部分时间花费在参照其它表的处理上,这些表既不在内存中也不在数据库设备上,而删除表delete和插入表insert总是位于内存中。
具有隐藏性,增加了系统的复杂性,一般情况下理解起来会有困难,因为它不执行我们根本感觉不到。
触发器是一种特殊的存储过程,很多人认为触发器能实现的存储过程也能实现,而且触发器在性能上也没有很大的提升,建议不要用触发器,其实大家在处理业务的时候各有各的想法和解决问题的办法。下面我们看一下两个特殊的逻辑表:
一、Insert表和Delete表
在执行触发器时,系统创建两个特殊的逻辑表,Insert和Delete表,这两个表是由系统管理和维护的,存储在内存中,而不是存储在数据库中,因此我们没办法对其修改。这两个表是和被触发器作用的表具有相同的表结构,而且是动态驻留在内存中,一旦触发器执行完毕,那么这两个表随之被删除。总的来说,这两个表主要保存因用户操作而被影响到的原数据值和新数据值。
1、Insert表:存放由于执行Insert或Update语句要从表插入的所有行,当执行Insert或Update语句时,新的行同时被添加到触发器的表中和Insert表中。
2、Delete表:存放由于执行Delete或Update语句要从表中删除的所有行。当执行Delete或Update语句时,被删除的行会从被激活的触发器中移动到Delete表中。
被Update语句触发的触发器会创建Insert表和Delete表。
二、使用触发器
先在数据库创建一个表
CREATE TABLE [employee]( [emp_id] [empid] NOT NULL, [fname] [varchar](20) NOT NULL, [minit] [char](1) NULL, [lname] [varchar](30) NOT NULL, [job_id] [smallint] NOT NULL, [job_lvl] [tinyint] NULL, [pub_id] [char](4) NOT NULL, [hire_date] [datetime] NOT NULL )
1、对表employee创建触发器
create Trigger unemployee on employee For Update AS raiserror ('update has been done successfully',16,10); update employee set fname='smith' where emp_id='PMA42628M';
执行后得到以下效果
消息 50000,级别 16,状态 10,过程 unemployee,第 4 行 update has been done successfully (1 行受影响)
例2、当对定义了删除型触发器的employee表进行删除操作时,首先检查删除几行,如果删除多行则返回提示信息,并回滚。
create trigger Delete_employee on employee for delete IF (@@rowcount=0) return IF (@@rowcount>1) begin rollback transaction raiserror('一下只能删除一条数据',16,1) end return
当删除一行时被触发。
上面是一些触发器的操作整理,希望对你有帮助!
相关文章推荐
- sql server 2008 触发器编写过程
- sql server 函数与触发器的使用
- SQL Server创建触发器
- SQL Server 2000中的触发器使用
- sql server中触发器
- SQL Server 触发器
- SQL Server 2000 触发器的使用实例
- SQL Server 2000 触发器的使用实例
- sql server 查询某个表的所有触发器名称
- sql server DDL触发器:监控数据库结构变化,并记录在 ddl_log 表中
- SQL Server 用触发器实现表的历史记录
- SQL Server 2005中触发器
- SQL Server 触发器
- SQL Server 触发器
- SQL Server 触发器
- SQL Server 触发器
- SQL Server 触发器
- sql server 创建触发器的语句格式
- SQL server 触发器、视图
- 【原】[SQL Server] TRIGGER 触发器获得insert, delete, update行的信息