sql数据库触发器怎么写 sql 触发器
Sql触发器(如何编写sql数据库触发器)
触发器是SQL server提供给程序员和数据分析师的一种确保数据完整性的方法 。它是一个与表事件相关的特殊存储过程 。它的执行不是由程序调用或手动启动,而是由事件触发 。当一个表被操作(插入、删除、更新)时,它将被激活 。触发器通常用于实施数据完整性约束和业务规则 。
一、触发器的优点1.触发是自动的 。对表中的数据进行任何更改后,它会立即被激活 。
2.数据库中的相关表可以级联修改触发器 。
3.触发器可以实施限制 。这些限制比检查约束定义的限制更复杂 。与CHECK约束不同,触发器可以引用其他表中的列 。
二、触发器的分类SqlServer包括三种常规类型的触发器:DML触发器、DDL触发器和登录触发器 。
1.DML(数据操作语言)触发器
DML触发器是附加到特定表或视图的一些操作码,当数据库服务器中发生数据操作语言事件时执行这些操作码 。SqlServer中有三种类型的DML触发器:
触发器:当数据插入到表中时触发;
删除触发器:从表中删除数据时触发;
更新触发器:当表中的数据被修改时触发 。
当您遇到以下情况时,应该考虑使用DML触发器:
通过数据库中的相关表级联更改
防止恶意或错误的插入、更新和删除操作,并使用由检查约束定义的更复杂的限制来实施其他限制 。
评估数据修改前后的表的状态,并根据差异采取措施 。
2.DDL(数据定义语言)触发器
当服务器或数据库中发生数据定义语言(主要是以create、drop、alter alter开头的语句)事件时,将激活并使用DDL触发器 。使用DDL触发器可以防止对数据架构的某些更改,或者记录数据中的更改或事件操作 。
3.登录触发器
登录触发器触发存储过程以响应登录事件 。当与SQL Server实例建立用户会话时,会引发此事件 。登录触发器将在登录的身份验证阶段完成之后、用户会话实际建立之前触发 。因此,来自触发器内部并通常到达用户的所有消息(如错误消息和来自PRINT语句的消息)都将被传输到SQL Server错误日志 。如果身份验证失败,将不会触发登录触发器 。
三、触发器的工作原理【删除、插入、更新】对应删除、插入、更新时触发 。
执行insert时,获取插入的数据,可以通过select*from inserted读取 。
删除时,获取删除前的数据,可以通过select * from delete读取 。
更新时,可以通过select *从删除中读取更新前的数据,通过select *从插入中读取更新后的数据 。
四、创建触发器1.创建触发器的语法:
CREATE TRIGGER trigger_name ON table_name [WITH ENCRYPTION] FOR | AFTER | INSTEAD OF [DELETE, INSERT, UPDATE] AST-SQL语句GO--with encryption 表示加密触发器定义的sql文本--delete,insert,update指定触发器的类型2.创建插入触发器
--创建insert触发器create trigger trig_inserton studentafter insertasbegin if object_id(N'student_sum',N'U') is null--判断student_sum表是否存在 create table student_sum(stuCount int default(0));--创建存储学生人数的student_sum表 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_name,stu_gender,stu_age)values('吕布','男',30);select stuCount 学生总人数 from student_sum; insert into student(stu_name,stu_gender,stu_age)values('貂蝉','女',30); select stuCount 学生总人数 from student_sum;insert into student(stu_name,stu_gender,stu_age)values('曹阿瞒','男',40); select stuCount 学生总人数 from student_sum;3.创建删除触发器
当用户执行删除操作时,删除触发器将被激活,从而控制用户从数据库中删除数据记录 。删除触发器触发后,用户删除的记录将被添加到删除表中,原表的相应记录也将被删除,因此可以在删除表中查看删除的记录 。
--创建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;4.创建更新触发器
当用户对指定的表执行Update语句时,将调用update触发器 。这种类型的触发器用于限制用户对数据的修改 。更新触发器可以执行两个操作:更新前的记录存储在删除的表中,更新后的记录存储在插入的表中 。
推荐阅读
- 数据库安全有哪些 数据库安全
- 法律咨询 法律数据库
- oracle基础知识入门 oracle数据库
- 系统上线前,SQL脚本的九大坑
- MongoDB数据库性能监控看这一篇就够了
- MySql主从复制配置,你了解吗?来看这篇,全懂了
- html简单网页代码模板,HTML网页设计:一个简单的登录界面可以连接到数据库记录的代码?
- 湖北汽车工业学院图书馆数据库~湖北汽车工业学院面积?
- 74ls373锁存器的作用?锁存器芯片74LS373内有8个D触发器,每个D触发器只能锁存一位二进制信息。对吗?
- 数据库系统期末考试试题 数据库试题