触发器的介绍

20、SQL Server 2000 触发器深度解析 本文深入解析了 SQL Server 2000 触发器的使用方法和设计原则。内容涵盖触发器的基础操作、列更新检测、多记录处理、嵌套与递归触发器、限制与语法、执行顺序、管理方法以及设计建议。同时,还介绍了触发器在数据验证、日志记录和级联操作中的实际应用场景,并提供了性能优化和错误处理的注意事项。适合数据库开发人员和管理员参考学习。 阅读详情

触发器是数据库应用中的重用工具,它的应用很广泛,这几天写一个化学数据统计方面的软件,需要根据采样,自动计算方差,在这里,我使用了触发器。
下面我摘录了SQL Server官方教程中的一段关于触发器的文字,确实有用的一点文字描述。

_________________________________________________________________

可以定义一个无论何时用INSERT语句向表中插入数据时都会执行的触发器。

当触发INSERT触发器时,新的数据行就会被插入到触发器表和inserted表中。inserted表是一个逻辑表,它包含了已经插入的数据行的一个副本。inserted表包含了INSERT语句中已记录的插入动作。inserted表还允许引用由初始化INSERT语句而产生的日志数据。触发器通过检查inserted表来确定是否执行触发器动作或如何执行它。inserted表中的行总是触发器表中一行或多行的副本。

日志记录了所有修改数据的动作(INSERT、UPDATE和DELETE语句),但在事务日志中的信息是不可读的。然而,inserted表允许你引用由INSERT语句引起的日志变化,这样就可以将插入数据与发生的变化进行比较,来验证它们或采取进一步的动作。也可以直接引用插入的数据,而不必将它们存储到变量中。

示例

在本例中,将创建一个触发器。无论何时订购产品(无论何时向Order Details表中插入一条记录),这个触发器都将更新Products表中的一列(UnitsInStock)。用原来的值减去订购的数量值即为新值。

USE Northwind

CREATE TRIGGER OrdDet_Insert

ON [Order Details]

FOR INSERT

AS

UPDATE P SET

UnitsInStock = P.UnitsInStock – I.Quantity

FROM Products AS P INNER JOIN Inserted AS I

ON P.ProductID = I.ProductID

  DELETE触发器的工作过程

当触发DELETE触发器后,从受影响的表中删除的行将被放置到一个特殊的deleted表中。deleted表是一个逻辑表,它保留已被删除数据行的一个副本。deleted表还允许引用由初始化DELETE语句产生的日志数据。

使用DELETE触发器时,需要考虑以下的事项和原则:

l         当某行被添加到deleted表中时,它就不再存在于数据库表中;因此,deleted表和数据库表没有相同的行。

l         创建deleted表时,空间是从内存中分配的。deleted表总是被存储在高速缓存中。

l         为DELETE动作定义的触发器并不执行TRUNCATE TABLE语句,原因在于日志不记录TRUNCATE TABLE语句。

示例

在本例中,将创建一个触发器,无论何时删除一个产品类别(即从Categories表中删除一条记录),该触发器都会更新Products表中的Discontinued列。所有受影响的产品都标记为1,标示不再使用这些产品了。

USE Northwind

CREATE TRIGGER Category_Delete

      ON Categories

      FOR DELETE

AS

      UPDATE P SET Discontinued = 1

           FROM Products AS P INNER JOIN deleted AS d

           ON P.CategoryID = d.CategoryID

UPDATE触发器的工作过程

可将UPDATE语句看成两步操作:即捕获数据前像(before image)的DELETE语句,和捕获数据后像(after image)的INSERT语句。当在定义有触发器的表上执行UPDATE语句时,原始行(前像)被移入到deleted表,更新行(后像)被移入到inserted表。

触发器检查deleted表和inserted表以及被更新的表,来确定是否更新了多行以及如何执行触发器动作。

可以使用IF UPDATE语句定义一个监视指定列的数据更新的触发器。这样,就可以让触发器容易的隔离出特定列的活动。当它检测到指定列已经更新时,触发器就会进一步执行适当的动作,例如发出错误信息指出该列不能更新,或者根据新的更新的列值执行一系列的动作语句。

语法

IF UPDATE (<column_name>)

例1

本例阻止用户修改Employees表中的EmployeeID列。

USE Northwind

GO

CREATE TRIGGER Employee_Update

      ON Employees

      FOR UPDATE

AS

IF UPDATE (EmployeeID)

BEGIN

      RAISERROR ('Transaction cannot be processed./

      ***** Employee ID number cannot be modified.', 10, 1)

      ROLLBACK TRANSACTION

END

    INSTEAD OF触发器的工作过程

可以在表或视图上指定INSTEAD OF触发器。执行这种触发器就能够替代原始的触发动作。INSTEAD OF触发器扩展了视图更新的类型。对于每一种触发动作(INSERT、UPDATE或 DELETE),每一个表或视图只能有一个INSTEAD OF触发器。

INSTEAD OF触发器被用于更新那些没有办法通过正常方式更新的视图。例如,通常不能在一个基于连接的视图上进行DELETE操作。然而,可以编写一个INSTEAD OF DELETE触发器来实现删除。上述触发器可以访问那些如果视图是一个真正的表时已经被删除的数据行。将被删除的行存储在一个名为deleted的工作表中,就像AFTER触发器一样。相似地,在UPDATE INSTEAD OF触发器或者INSERT INSTEAD OF触发器中,你可以访问inserted表中的新行。

不能在带有WITH CHECK OPTION定义的视图中创建INSTEAD OF触发器。

示例

在本例中,创建了一个德国客户表和一个墨西哥客户表。放置在视图上的INSTEAD OF触发器将把更新操作重新定向到适当的基表上。这时发生的插入是对CustomersGer表的插入而不是对视图的插入。

创建两个包含客户数据的表:

SELECT * INTO CustomersGer FROM Customers WHERE Customers.Country = 'Germany'

SELECT * INTO CustomersMex FROM Customers WHERE Customers.Country = 'Mexico'

GO

在该数据上创建视图:

CREATE VIEW CustomersView AS

SELECT * FROM CustomersGer

UNION

SELECT * FROM CustomersMex

GO

创建一个在上述视图上的INSTEAD OF触发器:

CREATE TRIGGER Customers_Update2

ON CustomersView

INSTEAD OF UPDATE AS

DECLARE @Country nvarchar(15)

SET @Country = (SELECT Country FROM Inserted)

IF @Country = 'Germany'

  BEGIN

   UPDATE CustomersGer

    SET CustomersGer.Phone = Inserted.Phone

    FROM CustomersGer JOIN Inserted

    ON CustomersGer.CustomerID = Inserted.CustomerID

  END

ELSE

  IF @Country = 'Mexico'

  BEGIN

   UPDATE CustomersMex

    SET CustomersMex.Phone = Inserted.Phone

    FROM CustomersMex JOIN Inserted

    ON CustomersMex.CustomerID = Inserted.CustomerID

  END

通过更新视图,测试触发器:

UPDATE CustomersView SET Phone = ' 030-007xxxx'
  WHERE CustomerID = 'ALFKI'

SELECT CustomerID, Phone FROM CustomersView
  WHERE CustomerID = 'ALFKI'

SELECT CustomerID, Phone FROM CustomersGer
  WHERE CustomerID = 'ALFKI'

-----------------------------------------

 
十八、D触发器介绍: 目录 1.D触发器: 2.D触发器功能表如下: 3.功能表解析: 4.工作原理分析: 1.D触发器: 从封装中可以看出: CLK的三角形表示边沿触发,即该D触发器为上升沿触发 SET和RESET均为低电平有效 2.D触发器功能表如下: 3.功能表解析: 由于SET和RESET都为低电平有效,所以在D触发器工作时,都要接高电平 当RESET为低电平时,触发器复位。 4.工作原理分析: 由于该触发器为上升沿触发器,在SET和RESET都为高电平的前提下,只要CLK输入 阅读详情

相关推荐

一文解读DeepSeek训练数据集

本文重点以DeepSeek为例,详细介绍预训练数据集相关内容。大语言模型LLM(如DeepSeek、ChatGPT、文心一言等)的“智慧”源于它们学习的海量数据集。简单来说,数据集就是模型的“知识库”,通常由互联网公开的文本、图片、视频等。这些数据需满足两个特点:规模大和多样性。规模大是指数据量可达千亿级词汇,让模型学习复杂规律;多样性则涵盖多领域(如科技、文学)、多语言、多形式(对话、新闻),帮助模型适应不同场景。例如,训练数据中既有百科知识,也有日常对话,模型才能既解答专业问题,又能闲聊。

u013891230的博客 7086

SQL Server 2005/2008 触发器的管理和查看

1、通过可视化操作来管理和查看触发器在Microsoft SQL Server Management Studio中,选中某一数据库的某一张表时,在“对象资源管理器详细”窗口中有“触发器”项。通过“触发器”的右键菜单功能,我们可以新建触发器。如果原来的表中已经存在了触发器,通过双击“触发器”项可以查看到具体的触发器,在此处可以执行 修改、删除等操作。 2、通过查询分析器来管理和查看触发器1)查看...

weixin_33888907的博客 700

RK806S PMIC电源管理芯片调试

当点按PWRON按键时,rk806上电开始启动bootloader和uboot,在执行到此处时检测到是由于按键启动的,所以0x5d的值是0x80,0x74的值是0x80,在一般情况下,mode都默认是none的,所以mode值为11,因此就进入了我们的if判断,若是由于按键启动的,则直接调用rk8xx_shutdown函数关掉,进入这个函数会看到实际是通过i2c给0x72寄存器的BIT(0)写1,使其关机。当SoC在12V电源已经接入,且处于关机状态时,使用PWRON按键开机,0x74的值则为0x80。

Y1anoohh的博客 2544

SQL 2000中的触发器使用

触发器是数据库应用中的重用工具,它的应用很广泛,这几天写一个化学数据统计方面的软件,需要根据采样,自动计算方差,在这里,我使用了触发器。下面我摘录了SQL Server官方教程中的一段关于触发器的文字,确实有用的一点文字描述。_______________________________________________________________________________________...

weixin_34252686的博客 150

数据包络分析(超效率-SBM模型)附python代码

超效率-SBM模型超效率SBMpython代码(部分) 这段时间差不多忙完了,终于有时间可以来经营我的博客了。 上阵子挺多人私信我,原谅我记性不好,可能没有回复全。 这篇文章是超效率的扩展。 超效率SBM SBM本身就是非径向模型(non-radial model),想要了解径向超效率的请自行去前面翻阅。 上篇文章说到super-SBM的一个模型,公式为: 这个模型是分式模型,我们可以通过charnes cooper变换,将其转变成为: python代码(部分) 在编程过程中,本来我以为第一个模型是无

weixin_43217288的博客 3万+

缺陷检测-金属表面缺陷检测

1介绍 缺陷检测是工业视觉技术中最重要的组成部分。业务广泛,场景丰富,技术难点高、工作量大。针对不同的场景,选择不同的相机和

huneng1991的专栏 5249

SQL Server 2000在视图上建立触发器的方法详解

对视图建立触发器,SQL Server 2000提供了instead of 方法,可以对原触发行为进行改写。 这里以一个简单的例子来说明使用对视图建立触发器的方法: 创建两个Table (假设id唯一) create table test1(id varchar(50), name varchar(50)) create table test2(id varchar(50), name varchar(50)) 创建一个视图 create view viewTest as select test1.id,

qq_43211632的博客 2195

tkinter表格进阶:5分钟实现CSV数据可视化编辑界面(含右键菜单配置)

本文详细介绍了如何使用Python的tkintertable库快速构建CSV数据可视化编辑界面。通过导入导出CSV数据、深度定制右键菜单(如复制、插入行、删除行)以及实现单元格验证等进阶功能,开发者能在5分钟内创建一个可嵌入自动化流程的专业级桌面数据编辑工具,显著提升数据处理效率。

930

Trigger

触发程序(trigger)是一种特殊型态的预存程序,当您使用INSERT、UPDATE或DELETE命令来修改资料列时,Microsoft SQL Server会自动执行您所定义的触发程序。 触发程序(trigger) 是一种特殊的预存程序,执行特定的陈述式(UPDATE、INSERT 或 DELETE)就可以啟动触发程序。触发程序与其他预存程序相同,可以是...

weixin_30684743的博客 281

ArcGIS Pro 制作这种地图海报

ArcMap 版本与 ArcGIS Pro 版本的制图功能相差太多,无论从美观上还是制图效率都远远优于 ArcMap,用了一段时间的 ArcGIS Pro ,真心推荐有条件的大家赶紧试一试!一个软件也能搞定一张不错的海报哦!----吐槽:好的设计真的是门花时间的活,这个教程大概花了我7小时左右,我都忘了我自己教程中截图多少张了!(可能是我速度太慢了)测试数据:阿里云盘分享-----北极海冰数据.https://www.aliyundrive.com/s/SUhsnqfkmXh。

J_Giser的博客 1427

34、实数域上高效负循环卷积算法解析

本文介绍了一种高效的实数域负循环卷积算法,通过引入离散傅里叶负循环变换(DFNT)避免传统方法的冗余,显著提升计算效率。文章详细分析了算法原理、误差传播机制,并推导出误差与方差界,提出无误差和基于3σ规则的参数设置方案。结合Cooley-Tukey与Gentleman-Sande FFT路径优化,实验验证了算法在不同精度和多项式长度下的性能优势与结果正确性,为密码学与信号处理等领域提供了高精度、高性能的卷积计算解决方案。

salt的博客 114

触发器介绍

一 触发器介绍    触发器是一种特殊的存储过程,它在插入,删除或修改特定表中的数据时触发执行,它比数据库本身标准的功能有更精细和更复杂的数据控制能力。数据库触发器有以下的作用:    * 安全性。可以基于数据库的值使用户具有操作数据库的某种权利。      # 可以基于时间限制用户的操作,例如不允许下班后和节假日      修改数据库数据。      # 可以基于

zdygis的专栏 2383

【QT开发教程】如何在Qt中使用Protobuf进行高效数据序列化

Protocol Buffers(Protobuf)是Google开发的一种语言中立、平台中立、可扩展的序列化机制,常用于数据交换和存储。Qt作为一个跨平台的C++图形用户界面应用框架,可以与Protobuf结合使用,实现高效的数据序列化和反序列化。本文将介绍如何在Qt中集成和使用Protobuf,包括基本概念、安装步骤、使用示例以及实际应用。

科技改变人类,技术成就未来 1440

MySQL触发器介绍

MySQL触发器介绍 MySQL 数据库中触发器是一个特殊的存储过程,不同的是执行存储过程要使用 CALL 语句来调用,而触发器的执行不需要使用 CALL 语句来调用,也不需要手工启动,只要一个预定义的事件发生就会被 MySQL自动调用。 引发触发器执行的事件一般如下: 增加一条学生记录时,会自动检查年龄是否符合范围要求。 每当删除一条学生信息时,自动删除其成绩表上的对应记录。 每当删除一条数据...

Climber813 4554

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Oracle 触发器trigger介绍

Oracle触发器是使用者对Oracle数据库的对象做特定的操作时,触发的一段PL/SQL程序代码器。触发的事件包括对表的DML操作,用户的DDL操作以及数据库事件等。

Ruishine的博客 4903

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

触发器详细介绍

触发器详细介绍一      触发器        是特定事件出现的时候,自动执行的代码块。类似于存储过程,但是用户不能直接调用他们。        功能:        1、 允许/限制对表的修改        2、 自动生成派生列,比如自增字段        3、 强制数据一致性        4、 提供审计和日志记录        5、 防止无效的事务处理        6、 启用复杂的业务逻

pstlz2008的专栏 973

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Oracle触发器介绍 行级触发器

行级触发器 本章介绍行级触发器机制。大部分例子以INSERT出发器给出,行级触发器可从insert update delete语句触发。 1、介绍触 发器是存储在数据库已编译的存储过程,使用的语言是PL/SQL,用编写存储过程一样的

jobs_zhaokai的专栏 3702

Oracle触发器介绍 语句级触发器

语句级触发器我们先看一个AFTER-INSERT-STATEMENT触发器:CREATE OR REPLACE TRIGGER temp_aisAFTER INSERT ON TEMPBEGIN    dbms_output.put_line(executing temp_ais);END;看一下下面语句的结果:SQL> set feedback offSQL> INSERT INTO tem

stevene的专栏 8110

INSTEAD OF 触发器介绍

当对表或可更新视图执行这些操作时,触发器会拦截并替代原始操作,转而执行触发器中定义的自定义逻辑。触发器是 SQL Server 中一种特殊类型的触发器,

a876106354的博客 868

Oracle触发器详细介绍

触发器是特定事件出现的时候,自动执行的代码块。类似于存储过程,但是用户不能直接调用他们。功能:1、 允许/限制对表的修改2、 自动生成派生列,比如自增字段3、 强制数据一致性4、 提供审计和日志记录5、 防止无效的事务处理6、 启用复杂的业务逻辑开始create trigger biufer_employees_department_id before insert or update  of d

风往哪吹~ 2511

施密特触发器介绍

‌:低压CMOS工艺,工作电压1.65V-5.5V,支持高速度(典型8ns@5V)和低功耗,内置ESD保护。‌:基于TTL(低功耗肖特基)工艺,输入悬空默认高电平,遵循TTL电平标准(高≥2.4V,低≤0.8V)。‌:标准4000系列CMOS,电压范围3V-18V,抗噪能力最强,但速度较慢(约100ns@10V)。‌:高速CMOS工艺,兼容TTL输入电平,静态功耗极低,支持2V-6V宽电压。‌:74LVC14可无缝替代74HC14,且支持更低电压。‌(如传感器接口):CD40106(高输入阻抗)。

2401_86246338的博客 1393

KingbaseES触发器介绍

触发器及其作用 触发器(trigger)是用户定义的由事件驱动的特殊过程。一旦定义,所有用户的对应操作均会由服务器自动激活相应的触发器,在DBMS核心层进行集中的完整性控制。 触发器类似于约束,但是比约束更加灵活,也可以实施比外键约束、检查约束更为复杂的检查和操作,具有更精细和更强大的数据处理能力。 触发器分类 KingbaseES的触发器根据依赖触发对象的不同分为两种表级触发器和事件触...

lyu1026的博客 1811

触发器Trigger介绍

触发器简介         触发器是数据库的一种,编码方式类似于存储过程,当有DML语句对表进行操作的时候,可以引起触发器的执行,从而实现对表的数据一致性维护;         通过触发器(Trigger)可以实现对某些表的监控,当监控表数据有新增、删除、修改的操作的时候,可以实现用户自定义的功能,比如:当基础表发生变化时,以基础表为基准的接口表数据的一致性维护; 触发器基础语法

shadow 2101

触发器简单介绍

触发器简单介绍触发器定义触发器:根据事件触发机制自动触发的一段sql语句。触发器的主要作用 数据完整性约束 对数据库中的表级联操作 对非法操作控制,回滚 触发器的种类触发器分为两种:数据操作语言触发器和数据定义语言触发器 数据操作语言触发器触发类型包括:Insert、update、delete 两张主要的表Deleted和inserted deleted表 执行delete或update操作

jielizhao的专栏 395

PostgreSQL触发器介绍

如果您具有 SELECT 权限,则可以引用以 NEW 命名的列。在上面的触发器函数中,有一个新的关键字“NEW”,它是触发器的 PostgreSQL 扩展。在 UPDATE 触发器中,可以使用 OLD.col_name 在更新行之前引用行的列,NEW.col_name在更新行后引用行的列。在触发器正文中,使用 OLD 和 NEW 关键字可以访问受触发器影响的行中的列。现在,我们可以创建触发器,该触发器将在执行时触发关联表的触发器中指定的事件。在 INSERT 触发器中,只能使用NEW.col_name。

YUNBEE_chen的博客 934
上一篇: 谈Delphi编程中“流”的利用
下一篇: 两个触发器的例子
iori13
博客等级 码龄20年 3粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值