数据库学习之——触发器

触发器的学习

  • 触发器概念
  • 创建一个简单的DML触发器
  • 创建一个复杂的DML触发器
  • (禁用、启动、删除)触发器

触发器概念

概念:触发器是数据库服务器中发生事件时自动执行的特种存储过程。

触发器类型

  1. DML 触发器:当发生数据操作语言,如: INSERT、UPDATE 或 DELETE 时,执行的触发器。
  2. DDL 触发器:当发生数据定义语言,如:CREATE、ALTER 和 DROP 是,执行的触发器。
  3. 登录触发器:与 SQL Server 实例建立用户会话时执行的触发器。

DML 触发器优点:DML 触发器类似于约束,可以强制实体完整性或域完整性;当约束支持的功能无法满足应用程序的功能要求时,DML 触发器非常有用。

本文主要讲解DML触发器简单使用

触发器工作原理
SQL Server创建了两个专用表:inserted和deleted表,这是两个逻辑表,由系统来维护,不允许用户直接对着两个表进行修改。他们存放于内存中,不存放在数据库中。这两个表的结构总是与被该触发器作用的表的结构相同。

  • inserted表:存放由于insert或update语句的执行而要加到该触发表中去的所有新行。即用于插入或更新表的新行值,在插入或更新表的同时,也将其副本存入inserted表中。因此在inserted表中的行总是与触发表中的新行相同。
  • deleted表:存放由于delete或update语句的执行而要从该触发表中删除的所有行。也就是说,把触发表中要删除或要更新的旧行移到deleted表中。因此deleted表和触发表的行不相同。

创建一个简单的DML触发器

CREATE TRIGGER TR_INSERT
ON STUDENT
FOR INSERT 
AS 
PRINT '恭喜你,数据插入成功';
GO
----------测试触发INSERT触发器----------
INSERT INTO STUDENT VALUES
('11','海子','男','28','西安')

创建一个复杂的DML触发器

创建DML触发器示例
当向成绩表插入学生多个课程的成绩时,学生的总分发生相应变化

ALTER TRIGGER TR_FS
ON GRADE
FOR INSERT
AS
BEGIN
	UPDATE T_ZF
	SET FS=FS+(SELECT FS FROM inserted)
	WHERE ID=(SELECT XSID FROM inserted);

	PRINT '学生总成绩修改成功'
END

(禁用、启动、删除)触发器

禁用触发器:

ALTER TABLE [dbo].[STUDENT]
DISABLE TRIGGER [TR_INSERT]

启用触发器:

ALTER TABLE [dbo].[STUDENT]
ENABLE TRIGGER [TR_INSERT]

删除触发器:

DROP TRIGGER [TR_INSERT]

你可能感兴趣的:(数据库学习之——触发器)