SQL中的“触发器”是什么?

kuaidi.ping-jia.net  作者:佚名   更新日期:2024-06-30
SQL中,触发器是什么?

1、触发器。 定义: 何为触发器?在SQL Server里面也就是对某一个表的一定的操作,触发某种条件,从而执行的一段程序。触发器是一个特殊的存储过程。 常见的触发器有三种:分别应用于Insert , Update , Delete 事件。(SQL Server 2000定义了新的触发器,这里不提) 我为什么要使用触发器?比如,这么两个表: Create Table Student( --学生表 StudentID int primary key, --学号 .... ) Create Table BorrowRecord( --学生借书记录表 BorrowRecord int identity(1,1), --流水号 StudentID int , --学号 BorrowDate datetime, --借出时间 ReturnDAte Datetime, --归还时间 ... ) 用到的功能有: 1.如果我更改了学生的学号,我希望他的借书记录仍然与这个学生相关(也就是同时更改借书记录表的学号); 2.如果该学生已经毕业,我希望删除他的学号的同时,也删除它的借书记录。 等等。 这时候可以用到触发器。对于1,创建一个Update触发器: Create Trigger truStudent On Student for Update ------------------------------------------------------- --Name:truStudent --func:更新BorrowRecord 的StudentID,与Student同步。 --Use :None --User:System --Author: 懒虫 # SapphireStudio ( www.chair3.com) --Date : 2003-4-16 --Memo : 临时写写的,给大家作个Sample。没有调试阿。 ------------------------------------------------------- As if Update(StudentID) begin Update BorrowRecord Set br.StudentID=i.StudentID From BorrowRecord br , Deleted d ,Inserted i Where br.StudentID=d.StudentID end 理解触发器里面的两个临时的表:Deleted , Inserted 。注意Deleted 与Inserted分别表示触发事件的表“旧的一条记录”和“新的一条记录”。 一个Update 的过程可以看作为:生成新的记录到Inserted表,复制旧的记录到Deleted表,然后删除Student记录并写入新纪录。 对于2,创建一个Delete触发器 Create trigger trdStudent On Student for Delete ------------------------------------------------------- --Name:trdStudent --func:同时删除 BorrowRecord 的数据 --Use :None --User:System --Author: 懒虫 # SapphireStudio ( www.chair3.com) --Date : 2003-4-16 --Memo : 临时写写的,给大家作个Sample。没有调试阿。 ------------------------------------------------------- As Delete BorrowRecord From BorrowRecord br , Delted d Where br.StudentID=d.StudentID 从这两个例子我们可以看到了触发器的关键:A.2个临时的表;B.触发机制。 这里我们只讲解最简单的触发器。复杂的容后说明。 事实上,我不鼓励使用触发器。触发器的初始设计思想,已经被“级联”所替代。

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

触发器是对表进行插入、更新、删除的时候会自动执行的特殊存储过程。

触发器一般用在check约束更加复杂的约束上面。例如在执行update、insert、delete这些操作的时候,系统会自动调用执行该表上对应的触发器。

SQL Server 2005中触发器可以分为两类:DML触发器和DDL触发器,其中DDL触发器它们会影响多种数据定义语言语句而激发,这些语句有create、alter、drop语句。

DML触发器分为:
1、 after触发器(之后触发)
a、 insert触发器
b、 update触发器
c、 delete触发器
2、 instead of 触发器 (之前触发)

其中after触发器要求只有执行某一操作insert、update、delete之后触发器才被触发,且只能定义在表上。而instead of触发器表示并不执行其定义的操作(insert、update、delete)而仅是执行触发器本身。既可以在表上定义instead of触发器,也可以在视图上定义。

触发器有两个特殊的表:插入表(instered表)和删除表(deleted表)。这两张是逻辑表也是虚表。有系统在内存中创建者两张表,不会存储在数据库中。而且两张表的都是只读的,只能读取数据而不能修改数据。这两张表的结果总是与被改触发器应用的表的结构相同。当触发器完成工作后,这两张表就会被删除。Inserted表的数据是插入或是修改后的数据,而deleted表的数据是更新前的或是删除的数据。

Update数据的时候就是先删除表记录,然后增加一条记录。这样在inserted和deleted表就都有update后的数据记录了。注意的是:触发器本身就是一个事务,所以在触发器里面可以对修改数据进行一些特殊的检查。如果不满足可以利用事务回滚,撤销操作。

触发器就是在更新数据时,让数据库完成额外的操作。
触发器有三种触发方式,在插入新数据时,在修改数据时,在删除数据时。
最简单的说法就是当你想往表A中插入数据的同时想表B的字段数据随表A的相同字段变化,就用到触发器

  • SQL中触发器有哪些类型?
    答:SQL SERVER中触发器的触发类型有三种。1、DML触发器,当数据库中表中的数据发生变化时,包括insert,update,delete任意操作,如果对该表写了对应的DML触发器,那么该触发器自动执行。2、DDL触发器,是Sql Server2005新增的触发器,主要用于审核与规范对数据库中表,触发器,视图等结构上的操作。比如在修改...
  • sql中触发器与存储过程的区别是什么?
    答:首先介绍一下触发器:触发器是一种特殊类型的存储过程,当使用下面的一种或多种数据修改操作在指定表中对数据进行修改时,触发器会生效:UPDATE、INSERT 或 DELETE。触发器可以查询其它表,而且可以包含复杂的 SQL 语句。它们主要用于强制复杂的业务规则或要求。例如,可以控制是否允许基于顾客的当前帐户状态...
  • SQL什么是索引和触发器?
    答:索引是对数据表中一个或多个列的值进行排序的结构,就像一本书的目录一样,索引提供了在行中快速查询特定行的能力 触发器是一种特殊类型的存储过程,它不同于之前的我们介绍的存储过程。触发器主要是通过事件进行触发被自动调用执行的。而存储过程可以通过存储过程的名称被调用。
  • 什么是触发器?
    答:触发器也可用于强制引用完整性,以便在多个表中添加、更新或删除行时,保留在这些表之间所定义的关系。然而,强制引用完整性的最好方法是在相关表中定义主键和外键约束。如果使用数据库关系图,则可以在表之间创建关系以自动创建外键约束。SQL Server 包括三种常规类型的触发器:DML 触发器、DDL 触发器和...
  • sql触发器如何用,有什么作用。最好列举三个、、、
    答:触发器就是一个特殊的存储过程,但是触发器没有输入参数,顾名思义是由某种特定的条件触发的。举个例子,如果你有2个表a,b其中a里面的id跟b里面的id绑定,a是学生基本信息表,b是学生选课信息表,假使某个同学被开除,那么a表里面该同学的信息就必须删除,那么竟然该同学都被开除了,b表里面的信息...
  • 在SQL中,一个表中是否能创建多个检查性约束
    答:[编辑本段]SQL触发器 触发器是一种特殊类型的存储过程,不由用户直接调用。创建触发器时会对其进行定义,以便在对特定表或列作特定类型的数据修改时执行。 CREATE PROCEDURE 或 CREATE TRIGGER 语句不能跨越批处理。即存储过程或触发器始终只能在一个批处理中创建并编译到一个执行计划中。 用触发器还可以强制执行业务...
  • 请问在sqlserver中什么是前触发型触发器,什么是后触发型触发器,怎么...
    答:前触发器:指在执行INSERT,UPDATE,DELETE之前去触发【触发器】要执行的语句 后触发器:指在执行INSERT,UPDATE,DELETE之后再去触发【触发器】要执行的语句。比如一个update触发器,要执行删除操作。那么有两种情况,第一先update在delete(后触发器)第二先delete在update(前触发器)...
  • sql中的触发器与存储过程有什么相同点和不同点?希望能专业点,谢谢_百 ...
    答:存储过程:在大型数据库系统中,一组为了完成特定功能的SQL语句集。触发器:SQL server 提供给程序员和数据分析员来保证数据完整性的一种方法。三、作用不同:1、存储过程:局时存储过程,以两个井字号(##)号开始,则该存储过程将成为一个存储在tempdb数据库中的全局临时存储过程,全局临时存储过程一旦...
  • SQL触发器的分类
    答:DML( 数据操纵语言 Data Manipulation Language)触发器:是指触发器在数据库中发生DML事件时将启用。DML事件即指在表或视图中修改数据的insert、update、delete语句。a、在SQL SERVER 2008中,DML触发器的实现使用两个逻辑表DELETED和INSERTED。这两个表是建立在数据库服务器的内存中,我们只有只读的权限...
  • SQL中存储过程与触发器有什么不同吗?
    答:一、二者的概念不同 1、存储过程 存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,它存储在数据库中,一次编译后永久有效,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象。2、触发器 触发器是一种...