前言

前面关系数据库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之可编程性触发器的更多相关文章

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

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

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

    前言 前面关系数据库SQL之可编程性函数(用户自定义函数)一文提到关系型数据库提供了可编程性的函数.存储过程.事务.触发器及游标,前文已介绍了函数,本文来介绍一下存储过程的创建.执行.删除.(还是以前 ...

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

    前言 在关系型数据库中除了前面几篇基本的数据库和数据表操作之外,还提供了可编程性的函数.存储过程.事务.触发器及游标. 本文介绍的是函数. 函数分为两种: 系统函数 用户自定义函数 准备工作 这里以银 ...

  4. SQL Server 2008空间数据应用系列六:基于SQLCRL的空间数据可编程性

    原文:SQL Server 2008空间数据应用系列六:基于SQLCRL的空间数据可编程性 友情提示,您阅读本篇博文的先决条件如下: 1.本文示例基于Microsoft SQL Server 2008 ...

  5. ORACLE PL/SQL编程之触发器

    8.1 触发器类型 8.1.1 DML触发器 8.1.2 替代触发器 8.1.3 系统触发器 8.2 创建触发器 8.2.1 触发器触发次序 8.2.2 创建DML触发器 8.2.3 创建替代(INS ...

  6. SQL Server数据库(SQL Sever语言 存储过程及触发器)

    存储过程:就像函数一样的会保存在数据库中-->可编程性-->存储过程 创建存储过程: 保存在数据库表,可编程性,存储过程create proc jiafa --需要的参数@a int,@b ...

  7. SQL Sever语言 存储过程及触发器

    存储过程:就像函数一样的会保存在数据库中-->可编程性-->存储过程 创建存储过程: 保存在数据库表,可编程性,存储过程create proc jiafa --需要的参数@a int,@b ...

  8. 关系数据库SQL之高级数据查询:去重复、组合查询、连接查询、虚拟表

    前言 接上一篇关系数据库SQL之基本数据查询:子查询.分组查询.模糊查询,主要是关系型数据库基本数据查询.包括子查询.分组查询.聚合函数查询.模糊查询,本文是介绍一下关系型数据库几种高级数据查询SQL ...

  9. SQL总结(六)触发器

    SQL总结(六)触发器 概念 触发器是一种特殊类型的存储过程,不由用户直接调用.创建触发器时会对其进行定义,以便在对特定表或列作特定类型的数据修改时执行. 触发器可以查询其他表,而且可以包含复杂的 S ...

随机推荐

  1. jQuery学习之路(5)- 简单的表单应用

    ▓▓▓▓▓▓ 大致介绍 接下来的这几个博客是对前面所学知识的一个简单的应用,来加深理解 ▓▓▓▓▓▓ 单行文本框 只介绍一个简单的样式:获取和失去焦点改变样式 基本结构: <form actio ...

  2. Javascript实用方法

    这篇我主要记录一些在工作中常用的.实用的方法. String trim 字符串方法中的trim主要用来去空格使用,很多时候,在后台做参数处理的时候,我们都会使用该方法,比如在获取用户输入的账户时 va ...

  3. 破解SQLServer for Linux预览版的3.5GB内存限制 (RHEL篇)

    微软发布了SQLServer for Linux,但是安装竟然需要3.5GB内存,这让大部分云主机用户都没办法尝试这个新东西 这篇我将讲解如何破解这个内存限制 要看关键的可以直接跳到第6步,只需要替换 ...

  4. JavaWeb——Listener

    一.基本概念 JavaWeb里面的listener是通过观察者设计模式进行实现的.对于观察者模式,这里不做过多介绍,大概讲一下什么意思. 观察者模式又叫发布订阅模式或者监听器模式.在该模式中有两个角色 ...

  5. CSharpGL(33)使用uniform块来优化对uniform变量的读写

    CSharpGL(33)使用uniform块来优化对uniform变量的读写 +BIT祝威+悄悄在此留下版了个权的信息说: Uniform块 如果shader程序变得比较复杂,那么其中用到的unifo ...

  6. Android之文件数据存储

    一.文件保存数据介绍 Activity提供了openFileOutput()方法可以用于把数据输出到文件中,具体的实现过程与在J2SE环境中保存数据到文件中是一样的.文件可用来存放大量数据,如文本.图 ...

  7. C#迪杰斯特拉算法

    C#迪杰斯特拉算法 网上有许多版本的,自己还是写一个理解点 Dijkstra.cs public class Dijkstra { private List<Node> _nodes; p ...

  8. web前端开发分享-目录

    1. web前端开发分享-css,js入门篇 2. web前端开发分享-css,js进阶篇 3. web前端开发分享-css,js提高篇 4. web前端开发分享-css,js工具篇 5. web前端 ...

  9. 详解前端模块化工具-webpack

    webpack是一个module bundler,抛开博大精深的汉字问题,我们暂且管他叫'模块管理工具'.随着js能做的事情越来越多,浏览器.服务器,js似乎无处不在,这时,使日渐增多的js代码变得合 ...

  10. Retrofit2.0起步篇

    retrofit 英文名字是改装的意思,也就是说他是对网络请求的一种改装,他不负责进行网络请求,他是对请求方式的一种封装.真正进行网络请求的是okhttp. 以下所有内容在Android Studio ...