专业汉语词典知识平台,分享汉字词语知识、历史文学知识解答!

励北网

sql触发器教学(SQL高级知识触发器)

来源:小易整编  作者:小易  发布时间:2023-03-15 11:15
摘要:触发器(trigger)是SQLServer提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,比如当对一个表进行操作(INSERT,DELE...
触发器的定义

触发器(trigger)是SQL Server提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,比如当对一个表进行操作( INSERT,DELETE, UPDATE)时就会激活它执行。

sql触发器教学(SQL高级知识触发器)

触发器的作用

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

触发器的主要作用主要有以下接个方面

强制数据库间的引用完整性级联修改数据库中所有相关的表,自动触发其它与之相关的操作跟踪变化,撤销或回滚违法操作,防止非法修改数据返回自定义的错误消息,约束无法返回信息,而触发器可以触发器可以调用更多的存储过程 触发器的优点触发器是自动的。当对表中的数据做了任何修改之后立即被激活。触发器可以通过数据库中的相关表进行层叠修改。触发器可以强制限制。这些限制比用CHECK约束所定义的更复杂。与CHECK约束不同的是,触发器可以引用其他表中的列。触发器的分类

SQL Server包括三种常规类型的触发器:DML触发器、DDL触发器和登录触发器。

DML(数据操作语言Data Manipulation Language)触发器

DML触发器是一些附加在特定表或视图上的操作代码,当数据库服务器中发生数据操作语言事件时执行这些操作。

SQL Server中的DML触发器有三种:

INSERT触发器:向表中插入数据时被触发;DELETE触发器:从表中删除数据时被触发;UPDATE触发器:修改表中数据时被触发。

当遇到下列情形时,应考虑使用DML触发器:

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

DDL(数据定义语言Data Definition Language)触发器

DDL触发器是当服务器或者数据库中发生数据定义语言(主要是CREATE,DROP,ALTER开头的语句)事件时被激活使用,使用DDL触发器可以防止对数据架构进行的某些更改或记录数据中的更改或事件操作。

登录触发器

登录触发器将为响应 LOGIN 事件而激发存储过程。与 SQL Server 实例建立用户会话时将引发此事件。登录触发器将在登录的身份验证阶段完成之后且用户会话实际建立之前激发。因此,来自触发器内部且通常将到达用户的所有消息(例如错误消息和来自 PRINT 语句的消息)会传送到 SQL Server 错误日志。如果身份验证失败,将不激发登录触发器。

触发器的工作原理

触发器触发时:

系统自动在内存中创建INSERTED表或DELETED表;只读,不允许修改,触发器执行完成后,自动删除。

INSERTED表:

临时保存了插入或更新后的记录行;可以从INSERTED表中检查插入的数据是否满足业务需求;如果不满足,则向用户发送报告错误消息,并回滚插入操作。

DELETED表:

临时保存了删除或更新前的记录行;可以从DELETED表中检查被删除的数据是否满足业务需求;如果不满足,则向用户报告错误消息,并回滚插入操作。

INSERTED表和DELETED表对照:

创建触发器

创建触发器的语法:

CREATE TRIGGER trigger_name ON table_name [WITH ENCRYPTION] FOR | AFTER | INSTEAD OF [DELETE INSERT UPDATE] AS T-SQL语句GO

注:

WITH ENCRYPTION 表示加密触发器定义的SQL文本

DELETE INSERT UPDATE指定触发器的类型

触发器示例

创建学生表

create table student( stu_id int identity(11) primary key stu_name varchar(10) stu_gender char(2) stu_age int)

创建INSERT触发器

--创建INSERT触发器create trigger trig_inserton student after insertasbegin --判断student_sum表是否存在 if object_id(N'student_sum'N'U') is null --创建存储学生人数的student_sum表 create table student_sum( stuCount int default(0) ); declare @stuNumber int; select @stuNumber = count(*)from student; --判断表中是否有记录 if not exists (select * from student_sum) insert into student_sum values(0); update student_sum set stuCount =@stuNumber; --把更新后总的学生数插入到student_sum表中end--测试触发器trig_insert--功能是向student插入数据的同时级联插入到student_sum表中,更新stuCount--因为是后触发器,所以先插入数据后,才触发触发器trig_insert;insert into student(stu_namestu_genderstu_age)values('吕布''男'30);select stuCount 学生总人数 from student_sum; insert into student(stu_namestu_genderstu_age)values('貂蝉''女'30); select stuCount 学生总人数 from student_sum;insert into student(stu_namestu_genderstu_age)values('曹阿瞒''男'40); select stuCount 学生总人数 from student_sum;

执行上面的语句后,结果如下图所示:

既然定义了学生总数表student_sum表是向student表中插入数据后才计算学生总数的,所以学生总数表应该禁止用户向其中插入数据

--创建insert_forbidden禁止用户向student_sum表中插入数据create trigger insert_forbiddenon student_sum after insertasbegin RAISERROR('禁止直接向该表中插入记录,操作被禁止'11) --raiserror 是用于抛出一个错误 rollback transactionend--触发触发器insert_forbiddeninsert student_sum (stuCount) values(5);

结果如下:

创建DELETE触发器

用户执行DELETE操作,就会激活DELETE触发器,从而控制用户能够从数据库中删除数据记录,触发DELETE触发器后,用户删除的记录会被添加到DELETED表中,原来表的相应记录被删除,所以在DELETED表中查看删除的记录。

--创建delete触发器create trigger trig_deleteon student after deleteasbegin select stu_id as 已删除的学生编号 stu_name stu_gender stu_age from deletedend;--执行一条delete语句触发trig_delete触发器delete from student where stu_id=1;

结果如下:

创建UPDATE触发器

UPDATE触发器是当用户在指定表上执行UPDATE语句时被调用被调用,这种类型的触发器用来约束用户对数据的修改。UPDATE触发器可以执行两种操作:更新前的记录存储在DELETED表中,更新后的记录存储在INSERTED表中。

--创建update触发器create trigger trig_updateon student after updateasbegin declare @stuCount int; select @stuCount=count(*) from student; update student_sum set stuCount =@stuCount; select stu_id as 更新前学生编号 stu_name as 更新前学生姓名 from deleted; select stu_id as 更新后学生编号 stu_name as 更新后学生姓名 from inserted;end--创建完成,执行一条update语句触发trig_update触发器update student set stu_name='张飞' where stu_id=2;

结果如下:

创建替代触发器

与前面介绍的三种AFTER触发器不同,SQL Server服务器在执行AFTER触发器的SQL代码后,先建立临时的INSERTED表和DELETED表,然后执行代码中对数据库操作,最后才激活触发器中的代码。而对于替代(INSTEAD OF)触发器SQL Server服务器在执行触发INSTEAD OF触发器的代码时,先建立临时的INSERTED表和DELETED表,然后直接触发INSTEAD OF触发器,而拒绝执行用户输入的DML操作语句。

--创建instead of触发器 create trigger trig_insteadOfon student instead of insertas begin declare @stuAge int; select @stuAge=(select stu_age from inserted) if(@stuAge >120) select '插入年龄错误' as '失败原因'end

创建完成,执行一条INSERT语句触发触发器trig_insteadOf

批注

触发器在早期的数据处理过程中经常使用到,特别是在处理一些因某些动作而需要对其他表进行调整的逻辑时。但是随着数据量的增长,触发器对数据库的性能影响越来越大,容易造成数据库性能降低。所以触发器在数据量大的场景是禁止使用的,但是其逻辑处理功能还是被一直保留,说明其还是有较深的应用场景,需要我们掌握它的相关用法。

觉得不错,还请各位老铁们多多转发~


本文地址:五行风水频道 https://www.neebe.cn/fengshui/926927.html,励北网一个免费的知识分享平台,本站部分文章来网络分享,本着互联网分享的精神,如有涉及到您的权益,请联系我们删除,谢谢!


五行风水
小编:小易整编
相关文章相关阅读
  • 乔丹投篮手型(标准投篮动作教学)

    乔丹投篮手型(标准投篮动作教学)

    乔丹投篮手型(标准投篮动作教学)在篮球场上,精准的投篮会让你在各种野场或者常规比赛的时候变成大腿。做职业射手是非常好的选择!因为射手不需要那么多的突破得分和造成身体接触,受伤的几率会大大降低!当然,投篮是篮球技术动作中的重要技术。无论你在...

  • dns是什么意思(搞懂 DNS 基础知识)

    dns是什么意思(搞懂 DNS 基础知识)

    dns是什么意思(了解DNS的基础知识)DNS(域名系统),也称为域名系统,是互联网的一项服务。本质上是一个分布式数据库,域名和IP相互映射。有了它,我们可以更方便地通过域名访问互联网。DNS具有以下特征:分布式的支持TCP和UDP,常用...

  • 等闲识得东风面的下一句?(涨知识:“等闲识得东风面,万紫千红总是春”)

    等闲识得东风面的下一句?(涨知识:“等闲识得东风面,万紫千红总是春”)

    等闲识得东风面的下一句?(涨知识:“等闲识得东风面,万紫千红总是春”)adminV管理员/2022-09-0303:20:04/0评论/586阅读0903轻松知道东风的下一句话?(知识往上走:“闲时知东风,色常春”)与唐诗的发展...

  • 文言文骂人经典语录大全(高级骂人的文言文)

    文言文骂人经典语录大全(高级骂人的文言文)

    文言骂人经典语录大全(文言骂人进阶)古人是怎么骂人的?很多人会好奇。毕竟没什么文化,真的不明白他是在骂你。在细细品味古代骂人句子的同时,你会发现,虽然没有脏话,却是相当的恶毒!一、你知道什么?钟寿儿墓的木头是拱形的。这句话出自《左传·Xi...

  • 诗歌知识(最完整的诗语知识大全)

    诗歌知识(最完整的诗语知识大全)

    知识诗歌中国是诗的国度,诗歌伴随了中国人五千年的历史。在诗歌文化的发展过程中,衍生出了许多属于诗歌的术语。这些术语使诗歌变得完美,这样我们就能更准确地找到我们想读的诗歌。对于每一个诗歌爱好者来说,知道这些“诗歌表达”可以帮助他们欣赏和区分...

  • 不为人知的历史(10个鲜为人知的历史冷知识)

    不为人知的历史(10个鲜为人知的历史冷知识)

    不为人知的历史(10个鲜为人知的历史冷知识)1.朱元璋为了集中皇帝权力,废除了宰相制度,但他做梦也没想到,自己的败家子居然搞出了内阁。万历以来,内阁的权力几乎与皇权并驾齐驱。以前首相除掉一个就能收拾一批,内阁除掉一个就会***。朱元璋...

  • 巴拉圭地图(你不知道的国家冷知识)

    巴拉圭地图(你不知道的国家冷知识)

    巴拉圭地图(你不知道的寒冷国家)巴拉圭(英语:Republicof巴拉圭,西班牙语:Repúblicadel巴拉圭),简称巴拉圭,是南美洲中部的一个国家。国土面积40.68万平方公里,人口705.3万。巴拉圭是南美洲仅有的两个内陆国...

  • 加拿大简介(几十个加拿大的冷知识)

    加拿大简介(几十个加拿大的冷知识)

    加拿大介绍(几十个加拿大的冷知识)1.加拿大(英语/法语:Canada)是北美北部一个海陆兼备的国家。东临大西洋,西临太平洋,西北接阿拉斯加,南接美国,北接北冰洋。2.加拿大国土面积998万平方公里,人口3800万,人口密度4.2人/平方...