先附上示例代码:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:      <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
CREATE TRIGGER  trigUserDeleteON  userTable instead of delete
AS
BEGINdeclare @num varchar(20)  select @num=phoneNum from deleteddelete customRoute where userId=@numdelete userLocat where phoneNum=@numdelete userTable where phoneNum=@num
END
GO

什么是触发器?在我的理解中:它不是人为启动的,而是系统自动启动的,就像事件一样,当触发条件满足时,就会执行触发器里面的内容。

在上述实例代码中,在表userTable中定义了一个名为trigUserDelete的删除(delete)触发器。

在我的数据库中有 customRoute,userLocat,userTable这三个表,前两表存在字段与userTable表中的phoneNum存在外键关系。现在要根据phoneNum来删除用户表(userTable)的内容。

userLocat(a,phoneNum):a为主键,phoneNum为外键(来自于userTable.phoneNum)

userTable(phoneNum,c,d) :phoneNum为主键

如果我把字段phoneNum的外键属性去掉,对编程没什么影响。 如果不去,userLocat中的phoneNum要么为空,要么是在userTable的phoneNum中存在的值。有外键的时候,数据库会自动帮你检查userLocat的phoneNum是否在UserTable的中存在。如果不存在,则操作失败。

所以,如果直接删除用户表中的用户,如果其他表的外键在该表的值中不存在,是会删除失败的。所以我们要删除用户表之前,需要删除其他表外键与之关联的数据。

类似的还有很多,例如现在有一个数据库,数据库中有两个表:

博客表:(博客id,博客内容)

评论表:(评论id,评论内容,所属博客id); 其中所属博客id来自于 博客id。

要想删除博客,在这之前要先删除所属这博客的评论  。

上述代码用的是INSTEAD OF触发器,和ALTER触发器不同的是,ALTER触发器在(delete,insert,update)原来操作后执行。而INSTEAD OF 是代替原来操作,也就是说不执行原来的SQL语句。

触发器还用到了临时表,常用临时表有两个,一个是inserted ,还有一个是deleted。当用户做增删改操作时,会把将要插入的数据放入inserted中,同理会把将要删除的数据放在deleted中。

在一个实例代码:有这样的一个功能,用户能够上传自己位置,不过要把原来的位置删除。换言之,就是更新位置信息的操作。(注:userLocat(phoneNum,Latitude,Longitude)).

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:      <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
CREATE TRIGGER  trigUserLocatInsertON  userLocatinstead of insert
AS
BEGINdeclare @phonenum varchar(20)
declare @latitude float
declare @longitude float
select @phonenum=phoneNum,@latitude=Latitude,@longitude=Longitude from inserted
delete userLocat where phoneNum=@phonenum
insert into userLocat (Latitude,Longitude,phoneNum) values(@latitude,@longitude,@phonenum)
END
GO

当然用update也可以实现。上述触发器在userLocat中定义,当进行insert操作的时候触发

SQLSever触发器建立相关推荐

  1. SQL Server 2005 学习笔记之触发器简介[转]

    触发器实际上就是一种特殊类型的存储过程,其特殊性表现在:它是在执行某些特定的T-SQL语句时自动的. 11.1  触发器简介 触发器实际上就是一种特殊类型的存储过程,它是在执行某些特定的T-SQL语句 ...

  2. java mysql 触发器 存储过程_mysql 触发器 存储过程 java调用

    触发器和存储过程是为了提高SQL的运行效率. SQL语句先编译.后执行,而触发器与存储过程都会提前预编译完成,且只编译一次,供反复调用. 随着时代的进步,硬件与带宽的提升,触发器和存储过程提升效率并不 ...

  3. sql server 2005学习笔记之触发器简介(一)

    触发器实际上就是一种特殊类型的存储过程,其特殊性表现在:它是在执行某些特定的T-SQL语句时自动的. 11.1  触发器简介 触发器实际上就是一种特殊类型的存储过程,它是在执行某些特定的T-SQL语句 ...

  4. SQL2008--SQL语句-存储过程-触发器-事务处理-基本语法-函数

    环境 SQL2008 1.存储过程建立 库-可编程性-存储过程-右击"存储过程"-点击"新建存储过程" SET ANSI_NULLS ON GO SET QUO ...

  5. 继续啃书,包,触发器

    <Oracle>开发实战经典 包 包是一种模块化设计的主要实现手段,通过包可以将一个模块中所要使用的各个程序结构(过程,函数,游标,类型,变量)放到一起管理.同时包中所定义的程序结构也可以 ...

  6. FPGA中亚稳态、异步信号处理、建立和保持时间违例及题目合集

    文章目录 一.亚稳态 1.1 降低亚稳态方法 二.异步信号处理的方式 三.建立和保持时间公式推导 3.1 建立时间 3.1 建立时间违例解决方法 3.2 保持时间违例解决方法 四.题目 一.亚稳态 亚 ...

  7. oracle--14触发器1

    trigger和procedure,function类似,只不过它不能被显示调用,只能被某个事件触发然后oracle自动去调用.常用的一般是针对一个表或视图创建一个trigger,然后对表或视图做某些 ...

  8. 数据库触发器(转自http://blog.csdn.net/chinayuan/article/details/6292335/#)

    触发器 Oracle 触发器 : 触发器是特定事件出现的时候,自动执行的代码块.类似于存储过程,但是用户不能直接调用他们. 功能: 1 . 允许 / 限制对表的修改 2 . 自动生成派生列,比如自增字 ...

  9. 触发器原理与使用方法

    触发器实际上就是一种特殊类型的存储过程,其特殊性表现在:它是在执行某些特定的T-SQL语句时自动的. 11.1  触发器简介 触发器实际上就是一种特殊类型的存储过程,它是在执行某些特定的T-SQL语句 ...

最新文章

  1. 深入理解jQuery的Event机制
  2. Java用数组的包文件_在Java中获取包内的类文件数组
  3. python括号生成_Python括号生成器的问题
  4. 逆向最大匹配分词算法C#
  5. 当随机不够随机:一个在线扑克游戏的教训
  6. idea 一直在build_CEO季度表彰团队| 我们一直在做最酷的事
  7. Uboot 命令是如何被使用的?
  8. html 自动生产,【SQL】用Sql Server自动生产html格式的数据字典
  9. 星巴克——最单纯的SNS应用
  10. php防止网站被镜像,网站防止被其他站iframe框架引用镜像的方法
  11. Java多用户商城系统B2B2C源码
  12. 人脸识别系统Python源代码的实现
  13. 计算机电源接口作用,计算机DIY必修课程,电源接口的详细说明
  14. myeclipse配置下面没有Tomcat的解决办法
  15. 安装Mathtype之后,打开word出现错误的解决方法
  16. PhysX官方手册翻译
  17. 使用iMX53 IPU SISG功能控制摄像头闪光灯
  18. 下载微信视频号视频的憨批方法
  19. Open Inventor 10.9.2 Crack
  20. 肖特基、整流、开关、快恢复二极管的区别

热门文章

  1. centos6 利用外部的smpt服务器计划任务发送邮件
  2. (--3198)2: Redirecting From A File( Piping and redirecting output
  3. [Dubbo实战]dubbo + zookeeper + spring 实战 (转)
  4. cisco 两个设备之间测试吞吐量的一个方法
  5. 第一篇:超级工具/Terminals,xterms 和 Shells
  6. SpringBoot @EnableAutoConfiguration注解
  7. linux部署安装nexus私服
  8. Ansible常用模块详解
  9. Win10如何取消开机密码
  10. golang安装:GOPATH环境变量无需配置说明(>1.13)