关系数据库SQL之可编程性触发器

作者: seay | 来源:发表于2016-05-16 23:53 被阅读367次

前言

前面关系数据库SQL之可编程性函数(用户自定义函数)一文提到关系型数据库提供了可编程性的函数、存储过程、事务、触发器及游标,前文已介绍了函数、存储过程、事务,本文来介绍一下触发器的使用。(还是以前面的银行系统为例)

图片来自网络

概述

触发器(TRIGGER)是个特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,比如当对一个表进行操作( INSERT,DELETE, UPDATE)时就会激活它执行。触发器经常用于加强数据的完整性约束和业务规则等。 触发器可以从 DBA_TRIGGERS ,USER_TRIGGERS 数据字典中查到。

触发器分为两种:AFTER触发器和INSTEAD OF触发器。

语法

  • 创建触发器
CREATE TRIGGER <触发器名称> 
   ON  <表名|视图名> 
   [AFTER | INSTEAD OF] <INSERT,DELETE,UPDATE>
AS 
--SQL语句块
  • 修改触发器
ALERT TRIGGER <触发器名称> 
   ON  <表名|视图名> 
   [AFTER | INSTEAD OF] <INSERT,DELETE,UPDATE>
AS 
--SQL语句块
  • 删除触发器
DROP TRIGGER <触发器名称>

说明:

  1. AFTER触发器主要用于在数据表执行INSERT,DELETE, UPDATE操作之后,同时操作其他表。
  2. INSTEAD OF触发器会替代所要执行的SQL语句,也就是说所要执行SQL并不会真正执行,真正执行的是触发器中定义的操作。
  3. AFTER触发器只针对表操作,INSTEAD OF触发器除了操作表还可以作用于视图,扩展视图可以支持的更新操作。
  4. AFTER触发器是在执行SQL之后触发,而INSTEAD OF触发器是在执行SQL之前触发。
  5. 一个表的INSERT,DELETE, UPDATE操作可以有多个AFTER触发器,有至多一个INSTEAD OF触发器

特殊表

触发器有两个特殊的表:插入表(instered表)和删除表(deleted表)

示例

1.AFTER触发器示例
在取钱时,交易信息表里面插入交易信息,同时要更改账户表里面的余额

--创建触发器
CREATE TRIGGER Trigger_getMoney 
   ON  TransInfo 
   AFTER INSERT
AS 
declare @cardId varchar(19)
declare @tranMoney money
select @cardId  = CardID , @tranMoney = TransMoney from instered;
update CardInfo set LeftMoney = LeftMoney - @tranMoney where CardID = @cardId
GO

--执行插入操作
insert into TransInfo values('1324 3626 7532 1935','取款',500,default);

2.INSTEAD OF触发器
指定的账户"422322001550135015"不可以删除

--创建触发器
CREATE TRIGGER Trigger_deleteAccount 
   ON  AccountInfo 
   INSTEAD OF DELETE
AS 
delete from AccountInfo where CardID != '422322001550135015' AND CardID=(select CardID from deleted)
--执行删除操作

本文就介绍到这里。
如有疑问请联系我。

本文采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。
基于简书上的作品创作。 可转载、引用,但需经本人同意后署名作者且注明文章出处,并以相同方式共享。

知识共享许可协议知识共享许可协议

相关文章

  • 关系数据库SQL之可编程性触发器

    前言 前面关系数据库SQL之可编程性函数(用户自定义函数)一文提到关系型数据库提供了可编程性的函数、存储过程、事务...

  • 关系数据库SQL之可编程性事务

    前言 前面关系数据库SQL之可编程性函数(用户自定义函数)一文提到关系型数据库提供了可编程性的函数、存储过程、事务...

  • 关系数据库SQL之可编程性存储过程

    前言 前面关系数据库SQL之可编程性函数(用户自定义函数)一文提到关系型数据库提供了可编程性的函数、存储过程、事务...

  • 关系数据库SQL之可编程性函数(用户自定义函数)

    前言 在关系型数据库中除了前面几篇基本的数据库和数据表操作之外,还提供了可编程性的函数、存储过程、事务、触发器及游...

  • MySQL(Mariadb)总结2 - SQL知识点汇总

    开发DBA:数据库设计(E-R关系图)、SQL开发、内置函数、存储例程(存储过程和存储函数)、触发器、事件调度器(...

  • mysql存储过程

    1.存储过程是存储在数据库目录中的一段声明性SQL语句。触发器,其他存储过程以及Java,Python,PHP等应...

  • 数据库基本知识

    数据库基于存储介质的不同分为:关系型数据库(SQL)、非关系型数据库(NoSQL:Not only SQL) 关系...

  • python3使用pymysql操作mysql

    数据库知识 数据库种类概述之数据库分类 SQL NoSQL(非关系型数据库,弥补关系型数据库的缺点,可以存储jso...

  • 触发器简单介绍

    触发器简单介绍 触发器定义 触发器:根据事件触发机制自动触发的一段sql语句。触发器的主要作用 数据完整性约束 对...

  • (5)衡量关系型数据库的4大要素

    选择关系型数据库主要有4个方面的考虑:易用性、可靠性、性能、扩展性。易用性是指关系型数据库有SQL语言、JDBC/...

网友评论

    本文标题:关系数据库SQL之可编程性触发器

    本文链接:https://www.haomeiwen.com/subject/cifmrttx.html