SQL Server基础之表级触发器
触发器分为两种,一种与数据表绑定,响应数据表指定动作(insert、delete或update),此处称为表级;一种与数据库本身绑定,响应数据定义语句(主要是CREATE、ALTER 和 DROP 开头的语句),此处称为库级。本篇以下所说触发器皆指表级触发器。
触发器是一段有特定语法,实现一定功能的SQL语句,它与数据表绑定,当数据表发生指定动作(insert、delete或update)时,由数据库自动调用。一个触发器必须且只能绑定一张数据表,必须且只能绑定数据表的一个动作(insert、delete或update)。触发器可以分为两种,一种是动作之后(After),一种是替代执行(instead of)。两种触发器可以同时绑定数据表的同一个动作(insert、delete或update)。但动作之后(After)触发器可以同时绑定多个,而替代执行(instead of)触发器一个数据表只能绑定三个,即一个动作(insert、delete或update)只能绑定一个。
触发器耗费性能,不易调试,不利于迁移,不符合时兴的面向对象设计理念,也不容易被接手老项目的人注意到,因而应尽量避免使用。
触发器语法:
创建:
CREATE TRIGGER trigger_name --触发器的名字
ON {table_name | view_name} --与触发器绑定的表或视图,必须且只能与一个表或视图绑定
{FOR | After | Instead of } --触发器类型,动作之后(After)或替代执行(instead of)
[ insert, update,delete ] --触发器响应的具体动作,一个触发器只能响应一个动作
AS
sql_statement --你需要编写的SQL语句
删除:
DROP TRIGGER { trigger/*要删除的触发器名字*/ } [ ,...n ]
修改:
ALTER TRIGGER trigger_name --触发器的名字
ON table_name --与触发器绑定的表或视图,必须且只能与一个表或视图绑定
{FOR | After | Instead of } --触发器类型,动作之后(After)或替代执行(instead of)
{[DELETE][,][INSERT][,][UPDATE]}--触发器响应具体动作,一个触发器只能响应一个动作 AS
sql_statement; --你需要编写的SQL语句
禁用启用触发器:
禁用:alter table 表名 disable trigger 触发器名称
启用:alter table 表名 enable trigger 触发器名称
触发器执行后会自动创建两张虚表inserted与deleted。它们可以理解为系统自动创建的、在触发器中使用的临时表,触发器开始时创建,结束后删除。它们的结构与触发器绑定的表结构一致,并且是只读的。
|
动作 |
Inserted |
Deleted |
|
增加(insert) |
存放增加的记录 |
无 |
|
删除(delete) |
无 |
存放被删除的记录 |
|
修改(update) |
存放更新后的记录 |
存放更新前的记录 |
当数据表只存在动作之后(After)触发器时,动作(insert、delete或update)对数据表进行真实更改,而存在替代执行(instead of)触发器时,动作(insert、delete或update)不对数据表进行真实更改。替代执行(instead of)触发器执行时间先于动作之后(After)触发器。有多个动作之后(After)触发器时,执行顺序取决于触发器建立时间,先建立的先执行。
触发器中不能使用以下语句:
CREATE 语句,如:CREATE DATABASE、CREATE TABLE、CREATE INDEX 等。
ALTER 语句,如:ALTER DATABASE、ALTER TABLE、ALTER INDEX 等。
DROP 语句,如:DROP DATABASE、DROP TABLE、DROP INDEX 等。
DISK 语句,如:DISK INIT、DISK RESIZE。
LOAD 语句,如:LOAD DATABASE、LOAD LOG。
RESTORE 语句,如:RESTORE DATABASE、RESTORE LOG。
=====================================================================================
本文只代表本人的见解,可能存在错误,仅用于技术交流。如果你喜欢该文,可以扫下面的二维码打赏我(打赏敬请备注“博客园打赏”五字)。
SQL Server基础之表级触发器的更多相关文章
- VFP获取 SQL Server 的数据表、触发器、存储过程、视图等脚本
本文代码转载自红雨先生 *-----------------------------------------------* SqlServer 相关函数*----------------------- ...
- SQL Server基础之登陆触发器
虽然同表级(DML)触发器和库级(DDL)触发器共顶着一个帽子,但登陆触发器与二者有本质区别.无论表级还是库级,都是用来进行数据管理的,而登陆触发器是纯粹的安全工具. 登陆触发器只响应LOGON事件, ...
- SQL server基础知识(表操作、数据约束、多表链接查询)
SQL server基础知识 一.基础知识 (1).存储结构:数据库->表->数据 (2).管理数据库 增加:create database 数据库名称 删除:drop database ...
- SQL server 数据库用户表名称
转自(http://blog.163.com/jlj_sk/blog/static/22579293200861422833924/) 取得SQL server 数据库中 所有用户表名称 select ...
- SQL Server数据库、表、数据类型基本概念
一.SQL Server的数据存储结构 SQL Server是一个数据库管理系统,需要以有效方式存储高容量数据.要更好地理解SQL Server处理数据的方式,就需要了解数据的存储结构. 1.文件类型 ...
- 《SQL Server基础——SQL语句》
SQL Server基础--SQL语句 一.创建和删除数据库: 1.创建数据库(默认化初始值) 格式: CREATE DATABASE 数据库名称 例如: CREATE DATABASE ...
- 数据库开发基础-SQl Server 基础
SQL Server 基础 1.什么是SQL Server SQL:Structured Query Language 结构化查询语言 SQL Server是一个以客户/服务器(c/s)模式访问.使 ...
- 【SQL Server】SQL Server基础之存储过程
SQL Server基础之存储过程 阅读目录 一:存储过程概述 二:存储过程分类 三:创建存储过程 1.创建无参存储过程 2.修改存储过程 3.删除存储过程 4.重命名存储过程 5.创建带参数的存储 ...
- Oracle\MS SQL Server Update多表关联更新
原文:Oracle\MS SQL Server Update多表关联更新 一条Update更新语句是不能更新多张表的,除非使用触发器隐含更新.而表的更新操作中,在很多情况下需要在表达式中引用要更新的表 ...
随机推荐
- session 控制单点登录
在我登录成功之后,我会 session.setAttribute("user", userMap);//设置session 所以就写了一个监听器来控制登录的. package or ...
- 不到50行代码实现一个能对请求并发数做限制的通用RequestDecorator
使用场景 在开发中,我们可能会遇到一些对异步请求数做并发量限制的场景,比如说微信小程序的request并发最多为5个,又或者我们需要做一些批量处理的工作,可是我们又不想同时对服务器发出太多请求(可能会 ...
- UVC 驱动调用过程与驱动框架的简单分析
内核:Linux-3.4.2 驱动:drivers\media\video\uvc\uvc_driver.c UVC 驱动整体调用流程: /* 打开设备描述符 */ 1. open: uvc_v4l2 ...
- 五分钟彻底学会iptables防火墙--技术流ken
iptables简介 IPTABLES 是与最新的 3.5 版本 Linux内核集成的 IP 信息包过滤系统.如果 Linux 系统连接到因特网或 LAN.服务器或连接 LAN 和因特网的代理服务器, ...
- Redis学习笔记(2)-新建虚拟电脑,安装系统CentOSMini
下载CentOSMini download 点击download,网页显示结果如下 点击红框,跳转至镜像页面,选择任一镜像,下载即可. 新建虚拟机,装载CentOSMini 点击新建 输入名称 输入C ...
- FormCollection collection 使用
参考文档:https://www.cnblogs.com/dare/p/9173479.html
- 35.QT-多线程
程序和进程的区别 进程是动态的,程序是静态的,进程是程序运行时的实例,是占用系统运行资源的程序 进程是暂时的,程序是永久的, 进程是通过程序运行时得到的 程序是一个数据文件,进程是内存中动态的运行实体 ...
- 【Java每日一题】20170315
20170314问题解析请点击今日问题下方的“[Java每日一题]20170315”查看(问题解析在公众号首发,公众号ID:weknow619) package Mar2017; public cla ...
- Elasticsearch系列(1):认识Elasticsearch
官方定义 Elasticsearch 是一个实时的分布式搜索分析引擎, 它能让你以一个之前从未有过的速度和规模,去探索你的数据. 它被用作全文检索.结构化搜索.分析以及这三个功能的组合. Elasti ...
- Http(s)与后台交互方式
前言 Http(s)是前后端交互的主要方式之一,交互技术主要有:Ajax(XMLHttpRequest).Fetch.地址跳转(window.open.location.href).Http(s)与后 ...