我是靠谱客的博主 乐观乌冬面,最近开发中收集的这篇文章主要介绍 关系数据库SQL之可编程性触发器前言概述语法特殊表示例,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

前言

前面关系数据库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)
--执行删除操作

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

原文来自:简书

最后

以上就是乐观乌冬面为你收集整理的 关系数据库SQL之可编程性触发器前言概述语法特殊表示例的全部内容,希望文章能够帮你解决 关系数据库SQL之可编程性触发器前言概述语法特殊表示例所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(70)

评论列表共有 0 条评论

立即
投稿
返回
顶部