前言:上面一片文章整理了触发器的基础知识点,下面我们看看如何使用触发器以及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表。

二、使用触发器

先在数据库创建一个表

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

当删除一行时被触发。

上面是一些触发器的操作整理,希望对你有帮助!

最新文章

  1. Daily Scrum Meeting 汇总
  2. Javascript日期比较
  3. rabbitmq之work_pool
  4. Xiph基金会成员:Timothy B. Terriberry
  5. Bootstrap系列 -- 20. 禁用状态
  6. setInterval 启用和停止,见代码
  7. iOS开发——音频篇——音效的播放
  8. WordPress RokNewsPager插件‘thumb.php’多个安全漏洞
  9. 【转】Linux内核调试方法总结
  10. CSS3 Gradient-CSS3渐变
  11. [C#参考]委托机制
  12. 规定CSS的属性仅在IE下生效 在非IE浏览器下不生效
  13. React-Native(五):React Native之Text学习
  14. MySQL数据库入门笔记
  15. https笔记【转】
  16. 大型运输行业实战_day15_1_全文检索之Lucene
  17. cStringIO 实现指定大小的字符串缓存
  18. python的map/reduce区别
  19. Ubuntu 16.04 编译安装 ss
  20. 使用 Nmon 监控 Linux 的系统性能

热门文章

  1. Jenkins基于角色的项目权限管理
  2. Java enum的用法详解 (转)
  3. 动态规划:插头DP
  4. 你知道吗?Java开发的10位牛人
  5. js关闭当前页面跳转新页面
  6. bootstrap-select,selectpicker 用法详细:通过官方文档翻译
  7. Shodan 使用
  8. 阿里云一键web环境包
  9. dm368 ipnc3.0环境搭建脚本
  10. C++中string.find()函数,string.find_first_of函数与string::npos