SQLSever触发器建立
先附上示例代码:
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触发器建立相关推荐
- SQL Server 2005 学习笔记之触发器简介[转]
触发器实际上就是一种特殊类型的存储过程,其特殊性表现在:它是在执行某些特定的T-SQL语句时自动的. 11.1 触发器简介 触发器实际上就是一种特殊类型的存储过程,它是在执行某些特定的T-SQL语句 ...
- java mysql 触发器 存储过程_mysql 触发器 存储过程 java调用
触发器和存储过程是为了提高SQL的运行效率. SQL语句先编译.后执行,而触发器与存储过程都会提前预编译完成,且只编译一次,供反复调用. 随着时代的进步,硬件与带宽的提升,触发器和存储过程提升效率并不 ...
- sql server 2005学习笔记之触发器简介(一)
触发器实际上就是一种特殊类型的存储过程,其特殊性表现在:它是在执行某些特定的T-SQL语句时自动的. 11.1 触发器简介 触发器实际上就是一种特殊类型的存储过程,它是在执行某些特定的T-SQL语句 ...
- SQL2008--SQL语句-存储过程-触发器-事务处理-基本语法-函数
环境 SQL2008 1.存储过程建立 库-可编程性-存储过程-右击"存储过程"-点击"新建存储过程" SET ANSI_NULLS ON GO SET QUO ...
- 继续啃书,包,触发器
<Oracle>开发实战经典 包 包是一种模块化设计的主要实现手段,通过包可以将一个模块中所要使用的各个程序结构(过程,函数,游标,类型,变量)放到一起管理.同时包中所定义的程序结构也可以 ...
- FPGA中亚稳态、异步信号处理、建立和保持时间违例及题目合集
文章目录 一.亚稳态 1.1 降低亚稳态方法 二.异步信号处理的方式 三.建立和保持时间公式推导 3.1 建立时间 3.1 建立时间违例解决方法 3.2 保持时间违例解决方法 四.题目 一.亚稳态 亚 ...
- oracle--14触发器1
trigger和procedure,function类似,只不过它不能被显示调用,只能被某个事件触发然后oracle自动去调用.常用的一般是针对一个表或视图创建一个trigger,然后对表或视图做某些 ...
- 数据库触发器(转自http://blog.csdn.net/chinayuan/article/details/6292335/#)
触发器 Oracle 触发器 : 触发器是特定事件出现的时候,自动执行的代码块.类似于存储过程,但是用户不能直接调用他们. 功能: 1 . 允许 / 限制对表的修改 2 . 自动生成派生列,比如自增字 ...
- 触发器原理与使用方法
触发器实际上就是一种特殊类型的存储过程,其特殊性表现在:它是在执行某些特定的T-SQL语句时自动的. 11.1 触发器简介 触发器实际上就是一种特殊类型的存储过程,它是在执行某些特定的T-SQL语句 ...
最新文章
- 深入理解jQuery的Event机制
- Java用数组的包文件_在Java中获取包内的类文件数组
- python括号生成_Python括号生成器的问题
- 逆向最大匹配分词算法C#
- 当随机不够随机:一个在线扑克游戏的教训
- idea 一直在build_CEO季度表彰团队| 我们一直在做最酷的事
- Uboot 命令是如何被使用的?
- html 自动生产,【SQL】用Sql Server自动生产html格式的数据字典
- 星巴克——最单纯的SNS应用
- php防止网站被镜像,网站防止被其他站iframe框架引用镜像的方法
- Java多用户商城系统B2B2C源码
- 人脸识别系统Python源代码的实现
- 计算机电源接口作用,计算机DIY必修课程,电源接口的详细说明
- myeclipse配置下面没有Tomcat的解决办法
- 安装Mathtype之后,打开word出现错误的解决方法
- PhysX官方手册翻译
- 使用iMX53 IPU SISG功能控制摄像头闪光灯
- 下载微信视频号视频的憨批方法
- Open Inventor 10.9.2 Crack
- 肖特基、整流、开关、快恢复二极管的区别
热门文章
- centos6 利用外部的smpt服务器计划任务发送邮件
- (--3198)2: Redirecting From A File( Piping and redirecting output
- [Dubbo实战]dubbo + zookeeper + spring 实战 (转)
- cisco 两个设备之间测试吞吐量的一个方法
- 第一篇:超级工具/Terminals,xterms 和 Shells
- SpringBoot @EnableAutoConfiguration注解
- linux部署安装nexus私服
- Ansible常用模块详解
- Win10如何取消开机密码
- golang安装:GOPATH环境变量无需配置说明(>1.13)