SQL触发器

简介: SQL触发器

SQL触发器

触发器(trigger)

摘抄自百度百科

触发器(trigger)是SQL server 提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,比如当对一个表进行操作( insert,delete, update)时就会激活它执行。触发器经常用于加强数据的完整性约束和业务规则等。

触发器分类

(1)DML( 数据操纵语言 Data Manipulation Language)触发器:是指触发器在数据库中发生DML事件时将启用。DML事件即指在表或视图中修改数据的insert、update、delete语句。(2)DDL(数据定义语言 Data Definition Language)触发器:是指当服务器或数据库中发生DDL事件时将启用。DDL事件即指在表或索引中的create、alter、drop语句。

(3)登陆触发器:是指当用户登录SQL SERVER实例建立会话时触发。登录触发器将在登录的身份验证阶段完成之后且用户会话实际建立之前激发。

DML触发器

1、 after触发器(之后触发):它是在执行INSERT、UPDATE、DELETE语句操作之后执行触发器操作。不过不能对视图定义AFTER触发器。


2、 instead of 触发器 (之前触发):它在执行INSERT、UPDATE、DELETE语句操作之前执行触发器本身所定义的操作。而INSTEAD OF触发器是可以定义在视图上的。

inserted表与deleted表

触发器有两个特殊的表:插入表(instered表)和删除表(deleted表)。这两张是逻辑表也是虚表。而且两张表的都是只读的,只能读取数据而不能修改数据。当触发器执行完成后,它们也就会被自动删除。

INSERED表用于存放你在操件insert、update、delete语句后,更新的记录。

DELETED表用于存放你在操作 insert、update、delete语句前的记录。

注意:Update数据的时候就是先删除表记录,然后增加一条记录。

触发器的优缺点

优点:

触发器可通过数据库中的相关表实现级联更改;通过级联引用完整性约束可以更有效地执行这些更改。

级联:多个对象之间的映射关系。指当主动方对象执行操作时,被关联对象(被动方)是否同步执行同一操作。1.如我更改了学生的学号,我希望他的借书记录仍然与这个学生相关(也就是同时更改借书记录表的学号)


触发器也可以评估数据修改前后的表状态,并根据其差异采取对策。


缺点:

复杂的触发器代码,会降低执行速度

过度使用也会造成数据库维护困难。


创建触发器

CREATE TRIGGER --触发器名
   ON  --表名
  FOR| AFTER |INSTEAD OF--什么类型触发器选一个
    INSERT|DELETE|UPDATE--执行什么语句,选一个
AS 
BEGIN
  --SQL语句
END
GO

实例 删除类别触发器

ALTER TRIGGER [dbo].[trigCateoryDelete]
   ON  [dbo].[category]
  instead of
   DELETE
AS 
BEGIN
  declare @caId int 
  select  @caId= id from  deleted 
  --删除评论
  delete comment where newsId in (select newsId from news where caID =@caId )
  --删除新闻
  delete news where caId= @caId
  --删除类别
  delete category where id = @caId
END
目录
相关文章
|
3月前
|
SQL 存储 数据库
PL/SQL触发器的概述和用途
PL/SQL触发器的概述和用途
32 2
|
9月前
|
存储 SQL 安全
数据库SQL Server 9-10 章(存储过程与触发器)
数据库SQL Server 9-10 章(存储过程与触发器)
152 0
|
4月前
|
SQL 关系型数据库 MySQL
My Sql 触发器
My Sql 触发器
|
4月前
|
SQL 存储 关系型数据库
Mysql数据库 13.SQL语言 触发器
Mysql数据库 13.SQL语言 触发器
55 0
|
9月前
|
SQL 存储 安全
SQL Server——触发器
触发器,是一种特殊类型的存储过程,它在指定的表中的数据发生变化时自动生效。经常通过触发器来强制实现不同表中的逻辑相关数据的引用完整性或一致性。触发器主要是通过事件进行触发而被执行的,而存储过程可以通过过程名字而直接调用。当对某一个表进行诸如UPDATE、INSERT、DELETE这些操作时,SQL Server就会自动执行触发器所定义的SQL语句,从而确保对数据的处理必须符合这些SQL语句所定义的规则
|
9月前
|
SQL 存储 数据库
SQL触发器
SQL触发器
41 0
|
10月前
|
SQL 存储 安全
如何使用SQL语句创建触发器
如何使用SQL语句创建触发器
156 0
|
10月前
|
SQL 数据库
【牛腩视频】之SQL触发器
【牛腩视频】之SQL触发器
80 0
|
10月前
|
存储 SQL 关系型数据库
【MySQL速通篇003】MySQL视图,MySQL触发器,MySQL函数,MySQL存储过程(参数分类,存储过程的增删改查等),SQL的动态执行,支持事务的存储过程,pymysql 2
【MySQL速通篇003】MySQL视图,MySQL触发器,MySQL函数,MySQL存储过程(参数分类,存储过程的增删改查等),SQL的动态执行,支持事务的存储过程,pymysql 2
278 0
|
10月前
|
存储 SQL NoSQL
【MySQL速通篇003】MySQL视图,MySQL触发器,MySQL函数,MySQL存储过程(参数分类,存储过程的增删改查等),SQL的动态执行,支持事务的存储过程,pymysql 1
【MySQL速通篇003】MySQL视图,MySQL触发器,MySQL函数,MySQL存储过程(参数分类,存储过程的增删改查等),SQL的动态执行,支持事务的存储过程,pymysql 1
435 0