SQL Server之触发器

这篇具有很好参考价值的文章主要介绍了SQL Server之触发器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

触发器

一、概述

触发器是一种特殊类型的存储过程,主要是通过事件触发来执行的,而存储过程可以通过存储过程名来直接调用。当往某一个数据表中插入、修改或者删除记录时,SQL Server就会自动执行触发器所定义的SQL语句,从而确保对数据的处理必须符合由这些SQL语句所定义的规则。触发器和引起触发器执行的SQL语句被当作一次事务处理,如果这次事务未获得成功,SQL Server会自动返回该事务执行前后状态。

触发器是一个在修改指定表值的数据时执行的存储过程,不同的是执行存储过程要使用EXEC语句来调用,而触发器的执行不需要使用EXEC语句来调用,通过创建触发器可以保证不同数据表中的相关数据的引用完整性或一致性。

触发器的优点:

  1. 触发器是自动的。当对数据表中的数据做了任何修改(比如手工输入或者应用程序采取的操作)之后触发器会立即被激活。
  2. 触发器可以通过数据库中的相关数据表进行层叠更改。
  3. 触发器可以强制一些限制。这些限制比用CHECK约束所定义的更复杂。与CHECK约束不同的是,触发器可以引用其他数据表中的列(即数据表中的字段)。

1.1、触发器的作用

触发器的主要作用就是其能够实现由主键和外键所不能保证的复杂的引用完整性和数据的一致性,它能够对数据库中的相关表进行级联修改,能提供比CHECK约束更复杂的数据完整性,并自定义错误信息。触发器的主要作用:

  1. 强制数据库间的引用 完整性。
  2. 级联修改数据库中所有相关的数据表,自动触发其他与之相关的操作。
  3. 跟踪变化,撤销或回滚违法操作,防止非法修改数据。
  4. 返回自定义的错误信息,约束无法返回信息,而触发器可以。
  5. 触发器可以调用更多的存储过程。

触发器与存储过程的主要区别在于触发器的运行方式,存储过程需要用户、应用程序或者触发器来显式地调用并执行,而触发器是当特定事件(INSERT、UPDATE、DELETE)出现的时候,自动执行。

1.2、触发器的分类

1.2.1、数据操作语言触发器

数据操作语言(DML)触发器是一些附加在特定表或视图上的操作代码,当数据库服务器中发生数据操作语言事件时执行这些操作。SQL Server中DML触发器有3种:INSERT触发器、UPDATE触发器和DELETE触发器。当遇到下面的情形时,考虑使用DML触发器:

  1. 通过数据库中的相关表实现级联更改。
  2. 防止恶意或者错误的INSERT、UPDATE和DELETE操作,并强制执行比CHECK约束定义的限制更为复杂的其他限制。
  3. 评估数据修改前后表的状态,并根据该差异采取措施。

在SQL Server中,针对每个DML触发器定义了两个特殊的表:DELETED表和INSERTED表,这两个逻辑表在内存中存放,由系统来创建和维护,用户不能对它们进行修改。触发器执行完成之后与该触发器相关的这两个表也会被删除。

  1. DELETED表存放执行DELETE或者UPDATE语句时要从表中删除的行。在执行DELETE或UPDATE时,被删除的行从触发触发器的表中被移动到DELETED表,即DELETED表和触发触发器的表有公共的行。
  2. INSERTED表存放执行INSERT或UPDATE语句时要向表中插入的行,在执行INSERT或UPDATE事务中,新行同时添加到触发触发器的表和INSERTED表。INSERTED表的内容是触发触发器的表中新行的副本,即INSERTED表中的行总是与触发触发器的表中的新行相同。

1.2.1、数据定义语言触发器

数据定义语言(DDL)触发器是当服务器或者数据库中发生数据定义语言事件时被激活而调用,使用DDL触发器可以防止对数据库架构进行的某些未授权更改。

二、创建DML触发器

DML触发器是指当数据库服务器中发生数据库操作语言事件时要执行的操作,DML事件包括对数据表或视图发生的INSERT、DELETE、UPDATE语句。

2.1、INSERT触发器

因为触发器是一种特殊类型的存储过程,所以创建触发器的语法格式与创建存储过程的语法格式相似。

当用户向表中插入新的记录行时,被标记为FOR INSERT的触发器的代码就会执行,同时SQL Server会创建一个新行的副本,将副本插入到一个特殊表中。该表只在触发器的作用域内存在。下面来创建当用户执行INSERT操作时触发的触发器。

在stu_info表上创建一个名为Insert_Student的触发器,在用户向stu_info表中插入数据时触发:

USE SQLDB;

GO

CREATE TRIGGER Insert_Student

ON stu_info

AFTER INSERT

AS

BEGIN

    IF OBJECT_ID(N'stu_Sum',N'U') IS NULL                   ---判断stu_Sum表是否存在

        CREATE TABLE stu_Sum(number INT DEFAULT 0);         ---创建存储学生人数的stu_Sum表

    DECLARE @stuNumber INT;

    SELECT @stuNumber = COUNT(*) FROM stu_info;

    IF NOT EXISTS (SELECT * FROM stu_Sum)                   ---判断表中是否有记录

        INSERT INTO stu_Sum VALUES(0);

    UPDATE stu_Sum SET number = @stuNumber                  ----把更新后总的学生人数插入到stu_Sum表中

END

GO

sqlserver触发器,数据库,sqlserver

 

上述程序语句的执行过程分析如下:

IF OBJECT_ID(N'stu_Sum',N'U') IS NULL                   ---判断stu_Sum表是否存在

CREATE TABLE stu_Sum(number INT DEFAULT 0);         ---创建存储学生人数的stu_Sum表

IF语句判断是否存在名为stu_Sum的表,如果不存在则创建该表。

DECLARE @stuNumber INT;

SELECT @stuNumber = COUNT(*) FROM stu_info;

这两行语句声明一个整数类型的变量@stuNumber,其中存储了SELECT语句查询stu_info表中所有学生的人数。

    IF NOT EXISTS (SELECT * FROM stu_Sum文章来源地址https://www.toymoban.com/news/detail-741360.html

到了这里,关于SQL Server之触发器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数据库触发器简介——修改数据的触发器、删除数据的触发器

    修改数据的触发器 更新数据 思考下面这个触发器会触发几次?几条数据就触发几次。

    2024年02月15日
    浏览(51)
  • 使用登录触发器限制SQL Server登录身份验证范围

    常见SQL Server主体是客户端和登录名,并且受GRANT和DENY的授权约束。 SQL Server数据库引擎将通过来自任何Query Management Studio(SSMS),Application Integration或某些其他设备的身份验证请求来授权登录。 开发,QA或阶段服务器可以允许所有登录使用不同的客户应用程序对SQL Server进行身

    2024年02月05日
    浏览(50)
  • 数据库-触发器

    目录 1. 触发器概述 2. 触发器的创建 2.1 创建触发器语法 3. 查看、删除触发器  3.2 删除触发器 4. 触发器的优缺点 4.2 缺点 4.3 注意点 在实际开发中,我们经常会遇到这样的情况:有 2 个或者多个相互关联的表,如 商品信息 和 库存信息 分 别存放在 2 个不同的数据表中, 我们

    2024年02月07日
    浏览(59)
  • MySQL数据库触发器

    查看触发器是指查看数据库中已经存在的触发器的定义、状态和语法信息等。MySQL 中查看触发器的方法包括 SHOW TRIGGERS 语句和查询 information_schema 数据库下的 triggers 数据表等。本节将详细介绍这两种查看触发器的方法。 SHOW TRIGGERS语句查看触发器信息 在 MySQL 中,可以通过 S

    2023年04月12日
    浏览(48)
  • MySQL——超详细数据库触发器教程

    目录 一、触发器的概念 二、创建触发器 三、查看触发器 四、删除触发器 总结         在实际开发中往往会碰到这样的情况:         当我们对一个表进行数据操作时,需要同步对其它的表执行相应的操作,正常情况下,如果我们使用sql语句进行更新,将需要执行多

    2024年02月07日
    浏览(68)
  • 五、C#与数据库交互(数据存储过程与触发器)

    在C#中与数据库交互时,除了基本的查询和更新操作,还经常需要使用存储过程和触发器。下面我将简要介绍如何在C#中使用存储过程和触发器。 存储过程 存储过程是一组为了完成特定功能的SQL语句集,它可以被存储在数据库中,并可以被调用执行。在C#中,你可以使用 Sql

    2024年01月25日
    浏览(49)
  • 数据库原理及应用实验报告-实验10-触发器

     实验题目   实验 10触发器    10.1 实验目的 通过实验使学生加深对数据完整性的理解,学会理解、创建和使用触发器。 10.2 实验内容   (用实验9的Teacher表) (1) 为 Teacher 表建立触发器T1,当插入或使更新表中的数据时,保证所操作的纪录的 Tage 值大于0。 (2) 为 Teacher 表建立

    2024年02月05日
    浏览(56)
  • 数据库24:触发器的创建和使用(头歌云课)

      任务描述 相关知识 触发器的定义 触发器和存储过程的区别 触发器的优点 触发器的作用 触发器的分类 DML触发器 DDL触发器 登录触发器 触发器的工作原理 inserted表 deleted表 创建触发器 编程要求 测试说明 任务描述 本关任务:通过实验,加深对数据完整性的理解,掌握创建

    2024年02月05日
    浏览(84)
  • Mysql数据库实验报告--实验五 存储过程和触发器

    在这个系列会更新一些最近老师要求写的实验报告~ 大家尽量对着我的文章做一个参考,不要盲目的cv,毕竟这个对于我们以后的工作学习还是十分重要的。 从这个实验开始,就不在cmd命令行里面进行mysql数据库的操作,因为代码长度和代码的复杂性,需使用 MySQL Workbench: 双

    2024年02月09日
    浏览(68)
  • MySQL数据库——MySQL创建触发器(CREATE TRIGGER)

    触发器是与 MySQL 数据表有关的数据库对象,在满足定义条件时触发,并执行触发器中定义的语句集合。触发器的这种特性可以协助应用在数据库端确保数据的完整性。 在 MySQL 5.7 中,可以使用 CREATE TRIGGER 语句创建触发器。 语法格式如下: 语法说明如下。 1) 触发器名 触发器

    2024年02月10日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包