关系数据库SQL之可编程性触发器

前言

前面关系数据库SQL之可编程性函数(用户自定义函数)一文提到关系型数据库提供了可编程性的函数、存储过程、事务、触发器及游标,前文已介绍了函数、存储过程、事务,本文来介绍一下触发器的使用。(还是以前面的银行系统为例)

图片来自网络

概述

触发器(TRIGGER)是个特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,比如当对一个表进行操作( INSERT,DELETE, UPDATE)时就会激活它执行。触发器经常用于加强数据的完整性约束和业务规则等。 触发器可以从 DBA_TRIGGERS ,USER_TRIGGERS 数据字典中查到。

触发器分为两种:AFTER触发器和INSTEAD OF触发器。

语法

  • 创建触发器
CREATE TRIGGER <触发器名称> ON  <表名|视图名> [AFTER | INSTEAD OF] <INSERT,DELETE,UPDATE>
AS 
--SQL语句块
  • 修改触发器
ALERT TRIGGER <触发器名称> ON  <表名|视图名> [AFTER | INSTEAD OF] <INSERT,DELETE,UPDATE>
AS 
--SQL语句块
  • 删除触发器
DROP TRIGGER <触发器名称>

说明:

  1. AFTER触发器主要用于在数据表执行INSERT,DELETE, UPDATE操作之后,同时操作其他表。
  2. INSTEAD OF触发器会替代所要执行的SQL语句,也就是说所要执行SQL并不会真正执行,真正执行的是触发器中定义的操作。
  3. AFTER触发器只针对表操作,INSTEAD OF触发器除了操作表还可以作用于视图,扩展视图可以支持的更新操作。
  4. AFTER触发器是在执行SQL之后触发,而INSTEAD OF触发器是在执行SQL之前触发。
  5. 一个表的INSERT,DELETE, UPDATE操作可以有多个AFTER触发器,有至多一个INSTEAD OF触发器

特殊表

触发器有两个特殊的表:插入表(instered表)和删除表(deleted表)

示例

1.AFTER触发器示例
在取钱时,交易信息表里面插入交易信息,同时要更改账户表里面的余额

--创建触发器
CREATE TRIGGER Trigger_getMoney ON  TransInfo AFTER INSERT
AS 
declare @cardId varchar(19)
declare @tranMoney money
select @cardId  = CardID , @tranMoney = TransMoney from instered;
update CardInfo set LeftMoney = LeftMoney - @tranMoney where CardID = @cardId
GO--执行插入操作
insert into TransInfo values('1324 3626 7532 1935','取款',500,default);

2.INSTEAD OF触发器
指定的账户"422322001550135015"不可以删除

--创建触发器
CREATE TRIGGER Trigger_deleteAccount ON  AccountInfo INSTEAD OF DELETE
AS 
delete from AccountInfo where CardID != '422322001550135015' AND CardID=(select CardID from deleted)
--执行删除操作

本文就介绍到这里。
如有疑问请联系我。

原文来自:简书

转载于:https://www.cnblogs.com/seayxu/p/5500066.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/490720.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

图像处理:图像特效之油画效果

利用OpenCVpython对图片进行处理产生油画的效果 算法可以分为五步&#xff1a; 1、获取图像的灰度(gray)图片2、设计一个小方框&#xff08;4x4 or 8x8 or 10x10等&#xff09;&#xff0c;统计每个小方框的像素值3、将0-255的灰度值划分成几个等级&#xff0c;并把第二步处理…

socket模拟http的登陆_python模拟登陆知乎(最新版)

为啥要写这一篇文章呢&#xff1f;&#xff08;主要是qq群内有人在模拟登陆知乎&#xff0c;一直不成功&#xff09;然后我抓包看了下&#xff0c;发现知乎登陆页已经改版了&#xff0c;而且难度大大提高了。开始抓包首先内&#xff0c;还是打开知乎首页&#xff0c;然后输入账…

基于wrapper的特征选择——递归特征消除RFE的python实现

class sklearn.feature_selection.RFE(estimator, *, n_features_to_selectNone, step1, verbose0) https://scikit-learn.org/stable/modules/generated/sklearn.feature_selection.RFE.html?highlightrfe#sklearn.feature_selection.RFE estimator&#xff1a;用于特征选…

图像识别:利用KNN实现手写数字识别(mnist数据集)

图像识别&#xff1a;利用KNN实现手写数字识别&#xff08;mnist数据集&#xff09; 步骤&#xff1a; 1、数据的加载&#xff08;trainSize和testSize不要设置的太大&#xff09; 2、k值的设定&#xff08;不宜过大&#xff09; 3、KNN的核心&#xff1a;距离的计算 4、k个最近…

寻找数组中第K频繁的元素

问题是&#xff1a;给你一个数组&#xff0c;求解出现次数第K多的元素。当然leetcode上的要求是算法复杂度不能大于O(N*logN)。 首先这个问题我先是在leetcode上看到&#xff0c;当时想了两种做法&#xff0c;做到一半都觉得不是很好&#xff0c;正在思考别的方法。然后在牛客网…

一个与生命起源有关的悖论终于得到了解决

来源&#xff1a;原理当Caitlin Cornell低头看显微镜时&#xff0c;她看见黑色的背景下浮现出一些大大的明亮斑点。它们就像微缩的太阳&#xff0c;在深色的太空幕布下闪耀着光芒。Conell回忆起把这些斑点展示给她的导师Sarah Keller时的兴奋&#xff0c;那时她们意识到&#x…

python ffmpy3与FFmpeg的安装

python ffmpy3与FFmpeg的安装 安装命令&#xff1a; pip install ffmpy3 去官网下载FFmpeg&#xff0c;根据自身电脑版本下载相应安装包 http://ffmpeg.org/download.html from ffmpy3 import FFmpeg ff FFmpeg(inputs{test.mp4: None},outputs{output.ts: None}) print(f…

千兆网线8根线定义图_家中的网线断裂/不够长,如何接线才最合适?

网线作为互联网时代不可或缺的主角&#xff0c;更是家装布线和工程施工中的常客。网线相对来说是很脆弱的&#xff0c;特别是一些质量一般的网线&#xff0c;在很多情况下都可能会被弄断&#xff0c;比如老鼠咬、过度拉伸、摆在地下人踩的人多了、电起火烧断、不小心被夹断等等…

中国决定以“六大政策”推动新一代人工智能发展

来源&#xff1a;智造智库以新一代人工智能为代表的新一轮科技革命和产业变革已经呈现出强大的影响力和生命力&#xff0c;人工智能技术对生产、流通、消费等形成高度渗透、跨界融合&#xff0c;新业态、新模式不断涌现&#xff0c;给以往的产业生态、社会分工、行业和企业边界…

第三次站立会议

项目进展&#xff1a;项目主体开始实施&#xff0c;我们在前期分工准备的同时开始讨论连连看的具体式样&#xff0c;开始上网参考其他项目的式样&#xff0c;搜集图片素材&#xff0c;为具有我们特色的连连看项目做准备。 存在问题&#xff1a;搜集素材时组员对项目的风格式样见…

ffmpy3与ffmpeg的简单使用

安装 python ffmpy3与ffmpeg的安装 https://blog.csdn.net/qq_40962368/article/details/90748852 ffmpy3的介绍&#xff1a; https://ffmpy3.readthedocs.io/en/latest/ ffmpy3是一个用于FFmpeg的Python包装器&#xff0c;最初是从ffmpy项目派生出来的。它根据提供的参数及…

C++ vector查找某个特定元素是否存在

使用find()函数需要#include<algorithm> if (std::find(v.begin(), v.end(), key) ! v.end()) 从find函数的返回结果与vector的end比较可以看出其实这是一个指针&#xff0c;那么如果我们想要获得索引那么将返回结果与begin做差即可 find(v.begin(), v.end(), key)-v…

python列表应用案例-python列表使用实例

#以下是我自己在联系列表中所编写的语句&#xff1a; names["zangsan","lisi","wangermazi","Xiaoliuzi","dabiaoge","牛erbiaodi"] #----------0--------1---------2---------------3----------4---------5-----…

边工作边刷题:70天一遍leetcode: day 7

Max Points on a Line 要点&#xff1a;这题暴力解是用任何两点确定一条直线&#xff0c;然后对其他点检查是否共线&#xff0c;显然&#xff0c;这里没用空间来存储之前的检查结果&#xff0c;所以time complexity是O(n^3)。这题的难点是如何存储从而实现O(n^2)解。思路是另一…

5G将改变技术格局的8个原因(上)

来源&#xff1a;CESAsia5G是引领第四次工业革命的通用技术。为了说明5G如何推动技术创新的飞跃&#xff0c;威讯(Verizon)首席执行官卫翰思(Hans Vestberg)在2019年国际消费电子产品展(CES 2019)主题演讲中罗列了5G所带来的八项有可能改变世界的能力。通用能力1和2&#xff1a…

python计算precision,recall,f1-score

sklearn.metrics.classification_report(y_true, y_pred, *, labelsNone, target_namesNone, sample_weightNone, digits2, output_dictFalse, zero_divisionwarn) https://scikit-learn.org/stable/modules/generated/sklearn.metrics.classification_report.html

matlab频谱分析_罗德与施瓦茨两款新的信号和频谱分析仪 具有多种频率型号

射频元器件、发射机和模组的制造商正面临着复杂的宽带射频信号测量任务和严苛的上市时间要求。特别是随着5G NR技术的进步&#xff0c;工程师在研发和生产中需要使用支持5G带宽和RF需求的测试解决方案分析无线通信信号。罗德与施瓦茨的新型中档信号和频谱分析仪R&SFSV3000和…

ArcEngine一些代码实现(转载)

转自&#xff1a;http://xitong.iteye.com/blog/1715759 ArcEngine 一些实现代码 ●● 目录&#xff1a; A1 …………实现&#xff1a;鼠标滑过显示要素 tip A2 …………实现&#xff1a;通过鼠标选择要素并高亮显示&#xff08;ISelectionEnvironment&#xff09; A3 ……………

tensorboard可视化经常出现的两个问题

tensorboard经常出现的两个问题 TensorFlow经常使用tf.summary.FileWriter("路径", sess.graph)函数将训练的图信息保存到日志中 使用TensorBoard读取读取并展示日志&#xff0c;使用如下语句&#xff1a; tensorboard --logdir日志所在路径 一、OSError: [Errn…