什么是触发器

触发器是一种特殊的存储过程,只能由事件驱动调用,而无法直接调用。

触发器有什么用

当对数据库的相关对象(数据库、表、视图)进行某些特定的操作时,数据库会自动调用相应的触发器。无需再执行增删改或存储过程的操作,让程序更自动化。

触发器怎么用

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(触发器)相关推荐

  1. 数据库系列(5):SQL查询

    SQL (Structured Query Language:结构化查询语言) 是用来访问和操作数据库系统的,是一门ANSI 的标准计算机语言.目前最为广泛使用的数据库查询语言就是SQL了,尽管我么说 ...

  2. 死磕数据库系列(二十):MySQL 数据库 DDL、DML、DQL、DCL 语言理论与实践(sql 8.0 版)...

    点关注公众号,回复"1024"获取2TB学习资源! 今天,民工哥带大家一起来学习一下 MySQL 数据库的 DDL.DML.DQL.DCL 这几种语言的理论知识与实践.如有帮助,请 ...

  3. SQL 触发器-如何查看当前数据库中有哪些触发器

    在查询分析器中运行: use 数据库名 go select * from sysobjects where xtype= 'TR' sysobjects 保存着数据库的对象,其中 xtype 为 TR ...

  4. sql 触发器未触发_学习SQL:SQL触发器

    sql 触发器未触发 SQL Triggers are another powerful database object we have at our disposal. In previous ar ...

  5. 【深入浅出MyBatis系列八】SQL自动生成插件

    为什么80%的码农都做不了架构师?>>>    #0 系列目录# 深入浅出MyBatis系列 [深入浅出MyBatis系列一]MyBatis入门 [深入浅出MyBatis系列二]配置 ...

  6. SQL Server 2008空间数据应用系列三:SQL Server 2008空间数据类型

    原文:SQL Server 2008空间数据应用系列三:SQL Server 2008空间数据类型 友情提示,您阅读本篇博文的先决条件如下: 1.本文示例基于Microsoft SQL Server ...

  7. .NET深入实战系列—Linq to Sql进阶

    .NET深入实战系列-Linq to Sql进阶 最近在写代码的过程中用到了Linq查询,在查找资料的过程中发现网上的资料千奇百怪,于是自己整理了一些关于Linq中容易让人困惑的地方. 本文全部代码基 ...

  8. SQL数据库误删除表数据恢复 SQL数据库truncate表数据恢复

    SQL数据库误删除表数据恢复 SQL数据库truncate表数据恢复 误删除表需要恢复该表,要注意几个问题, 第一 删除表后是否新建表了 是否插入数据了. 第二 删除表后是否立即关闭SQL服务了/ 第 ...

  9. idea如何给oracle添加数据_intelij idea下使用java和JDBC连接oracle数据库及简单的SQL操作...

    intelij idea下使用java和JDBC连接oracle数据库及简单的SQL操作 发布时间:2018-07-04 10:09, 浏览次数:2532 , 标签: intelij idea jav ...

最新文章

  1. C# 启动外部程序的几种方法
  2. BZOJ4196[Noi2015]软件包管理器——树链剖分+线段树
  3. 手动制造报错_一个订单管理系统帮你轻松应对复杂的生产订单管理
  4. Android中使用Notification在通知栏中显示通知
  5. .NET Core部署中你不了解的框架依赖与独立部署
  6. 旅游流的概念_2020年去张家界凤凰古城旅游亲身体验经历分享——实用攻略(图文)...
  7. python 货币合适_算法之Python实现 - 001 : 换钱的最少货币数
  8. 使用Redis Desktop Manager连接Redis服务器
  9. Spring依赖注入的理解
  10. 三星入职测试GSAT(global samsung aptitude test)
  11. ubuntu20.04安装搜狗输入法
  12. Wpf MessageBox的用法
  13. java dos攻击_一种高级的DoS攻击-Hash碰撞攻击
  14. leetcode **773. 滑动谜题(拼图)(2021.6.26)
  15. mysql 统计七日留存率_用户七日留存率分析
  16. 1一9数字行书写法_1一9数字行书写法
  17. 计算机程序设计员二级证书,大厂计算机程序设计员职业资格证书
  18. 如何用matlab解异或方程,Matlab-6:解非线性方程组newton迭代法
  19. Windows脚本初探之VBScrip的MsgBox函数
  20. linux宝塔重新安装,Linux服务器Windows系统 安装和卸载宝塔面板

热门文章

  1. C语言再学习 -- C 预处理器
  2. C语言再学习 -- 随机数函数
  3. Tensorflow Day18 Convolutional Autoencoder
  4. mysql查看系统运行日志文件_mysql自身运行日志文件详解
  5. php根据单词截取英文语句,php按单词截取字符串的方法_PHP教程
  6. java常见业务对象_Java各种对象(PO,BO,VO,DTO,POJO,DAO,Entity,JavaBean,JavaBeans)的区分...
  7. php人民币转换,PHP字符串转换RMB形式数字
  8. ppt给图片增加高斯模糊_制作PPT时,图片不清晰你如何处理?
  9. opencv python教程简书_OpenCV-Python教程:27.图像转换
  10. numpy 创建加一行_NumPy数据处理的可视化