数据库系列之T-SQL(触发器)
什么是触发器
触发器是一种特殊的存储过程,只能由事件驱动调用,而无法直接调用。
触发器有什么用
当对数据库的相关对象(数据库、表、视图)进行某些特定的操作时,数据库会自动调用相应的触发器。无需再执行增删改或存储过程的操作,让程序更自动化。
触发器怎么用
3.1 触发器的触发方式
SQL Server 按触发器被激活的时机可分为后触发和替代触发两种触发方式
引起触发器执行的修改语句若违反了某种约束,后触发方式不会激活触发器,替代触发方式会激活触发器
(1)后触发
当引起触发器执行的修改语句执行,并通过各种约束检查后,才执行触发器,这种触发方式称为后触发
创建这种触发器使用AFTER或FOR关键字
后触发只能创建在表上,而不能创建在视图上
(2) 替代触发
当执行可引起触发器执行的修改语句时,停止该修改语句的执行,仅执行其触发器,这种触发方式称为替代触发
创建这种触发器使用INSTEAD OF关键字
替代触发可创建在表上,也可以创建在视图上
3.2 激活触发器时的临时表
每个触发器被激活时,系统都为它自动创建两个临时表
INSERTED表:需要添加或更新后的数据
DELETED表:需要删除或更新前的数据
这两个表的结构与被激活触发器的表结构相同
触发器执行完成后,这两个表将被自动删除
3.3 示例一:替代触发
Create trigger tri_dropCustomer on customers Instead of delete Asdelete from orderswhere customerid=(select customerid from deleted)delete from customerswhere customerid=(select customerid from deleted) go
3.4 示例二:后触发
create trigger tri_updateOrderdate on Orders after update asdeclare @oldOrderdate datetimedeclare @newOrderdate datetimeselect @oldOrderdate=orderdate from deletedselect @newOrderdate=orderdate from insertedif @oldOrderdate<>@newOrderdatebeginprint '订单日期不能修改'rollback transactionend go
转载于:https://www.cnblogs.com/cmhunter/p/4280576.html
数据库系列之T-SQL(触发器)相关推荐
- 数据库系列(5):SQL查询
SQL (Structured Query Language:结构化查询语言) 是用来访问和操作数据库系统的,是一门ANSI 的标准计算机语言.目前最为广泛使用的数据库查询语言就是SQL了,尽管我么说 ...
- 死磕数据库系列(二十):MySQL 数据库 DDL、DML、DQL、DCL 语言理论与实践(sql 8.0 版)...
点关注公众号,回复"1024"获取2TB学习资源! 今天,民工哥带大家一起来学习一下 MySQL 数据库的 DDL.DML.DQL.DCL 这几种语言的理论知识与实践.如有帮助,请 ...
- SQL 触发器-如何查看当前数据库中有哪些触发器
在查询分析器中运行: use 数据库名 go select * from sysobjects where xtype= 'TR' sysobjects 保存着数据库的对象,其中 xtype 为 TR ...
- sql 触发器未触发_学习SQL:SQL触发器
sql 触发器未触发 SQL Triggers are another powerful database object we have at our disposal. In previous ar ...
- 【深入浅出MyBatis系列八】SQL自动生成插件
为什么80%的码农都做不了架构师?>>> #0 系列目录# 深入浅出MyBatis系列 [深入浅出MyBatis系列一]MyBatis入门 [深入浅出MyBatis系列二]配置 ...
- SQL Server 2008空间数据应用系列三:SQL Server 2008空间数据类型
原文:SQL Server 2008空间数据应用系列三:SQL Server 2008空间数据类型 友情提示,您阅读本篇博文的先决条件如下: 1.本文示例基于Microsoft SQL Server ...
- .NET深入实战系列—Linq to Sql进阶
.NET深入实战系列-Linq to Sql进阶 最近在写代码的过程中用到了Linq查询,在查找资料的过程中发现网上的资料千奇百怪,于是自己整理了一些关于Linq中容易让人困惑的地方. 本文全部代码基 ...
- SQL数据库误删除表数据恢复 SQL数据库truncate表数据恢复
SQL数据库误删除表数据恢复 SQL数据库truncate表数据恢复 误删除表需要恢复该表,要注意几个问题, 第一 删除表后是否新建表了 是否插入数据了. 第二 删除表后是否立即关闭SQL服务了/ 第 ...
- idea如何给oracle添加数据_intelij idea下使用java和JDBC连接oracle数据库及简单的SQL操作...
intelij idea下使用java和JDBC连接oracle数据库及简单的SQL操作 发布时间:2018-07-04 10:09, 浏览次数:2532 , 标签: intelij idea jav ...
最新文章
- C# 启动外部程序的几种方法
- BZOJ4196[Noi2015]软件包管理器——树链剖分+线段树
- 手动制造报错_一个订单管理系统帮你轻松应对复杂的生产订单管理
- Android中使用Notification在通知栏中显示通知
- .NET Core部署中你不了解的框架依赖与独立部署
- 旅游流的概念_2020年去张家界凤凰古城旅游亲身体验经历分享——实用攻略(图文)...
- python 货币合适_算法之Python实现 - 001 : 换钱的最少货币数
- 使用Redis Desktop Manager连接Redis服务器
- Spring依赖注入的理解
- 三星入职测试GSAT(global samsung aptitude test)
- ubuntu20.04安装搜狗输入法
- Wpf MessageBox的用法
- java dos攻击_一种高级的DoS攻击-Hash碰撞攻击
- leetcode **773. 滑动谜题(拼图)(2021.6.26)
- mysql 统计七日留存率_用户七日留存率分析
- 1一9数字行书写法_1一9数字行书写法
- 计算机程序设计员二级证书,大厂计算机程序设计员职业资格证书
- 如何用matlab解异或方程,Matlab-6:解非线性方程组newton迭代法
- Windows脚本初探之VBScrip的MsgBox函数
- linux宝塔重新安装,Linux服务器Windows系统 安装和卸载宝塔面板
热门文章
- C语言再学习 -- C 预处理器
- C语言再学习 -- 随机数函数
- Tensorflow Day18 Convolutional Autoencoder
- mysql查看系统运行日志文件_mysql自身运行日志文件详解
- php根据单词截取英文语句,php按单词截取字符串的方法_PHP教程
- java常见业务对象_Java各种对象(PO,BO,VO,DTO,POJO,DAO,Entity,JavaBean,JavaBeans)的区分...
- php人民币转换,PHP字符串转换RMB形式数字
- ppt给图片增加高斯模糊_制作PPT时,图片不清晰你如何处理?
- opencv python教程简书_OpenCV-Python教程:27.图像转换
- numpy 创建加一行_NumPy数据处理的可视化