【SQL SERVER】触发器(二)
前言:上面一片文章整理了触发器的基础知识点,下面我们看看如何使用触发器以及insert和delete表;
这里我们补充一下触发器的缺点:
性能较低。我们在运行触发器时,系统处理的大部分时间花费在参照其它表的处理上,这些表既不在内存中也不在数据库设备上,而删除表delete和插入表insert总是位于内存中。
具有隐藏性,增加了系统的复杂性,一般情况下理解起来会有困难,因为它不执行我们根本感觉不到。
触发器是一种特殊的存储过程,很多人认为触发器能实现的存储过程也能实现,而且触发器在性能上也没有很大的提升,建议不要用触发器,其实大家在处理业务的时候各有各的想法和解决问题的办法。下面我们看一下两个特殊的逻辑表:
一、Insert表和Delete表
在执行触发器时,系统创建两个特殊的逻辑表,Insert和Delete表,这两个表是由系统管理和维护的,存储在内存中,而不是存储在数据库中,因此我们没办法对其修改。这两个表是和被触发器作用的表具有相同的表结构,而且是动态驻留在内存中,一旦触发器执行完毕,那么这两个表随之被删除。总的来说,这两个表主要保存因用户操作而被影响到的原数据值和新数据值。
1、Insert表:存放由于执行Insert或Update语句要从表插入的所有行,当执行Insert或Update语句时,新的行同时被添加到触发器的表中和Insert表中。
2、Delete表:存放由于执行Delete或Update语句要从表中删除的所有行。当执行Delete或Update语句时,被删除的行会从被激活的触发器中移动到Delete表中。
被Update语句触发的触发器会创建Insert表和Delete表。
二、使用触发器
先在数据库创建一个表
CREATE TABLE [employee](
[emp_id] [empid] NOT NULL,
[fname] [varchar](20) NOT NULL,
[minit] [char](1) NULL,
[lname] [varchar](30) NOT NULL,
[job_id] [smallint] NOT NULL,
[job_lvl] [tinyint] NULL,
[pub_id] [char](4) NOT NULL,
[hire_date] [datetime] NOT NULL
)
1、对表employee创建触发器
create Trigger unemployee on employee
For Update
AS
raiserror ('update has been done successfully',16,10); update employee set fname='smith' where emp_id='PMA42628M';
执行后得到以下效果
消息 50000,级别 16,状态 10,过程 unemployee,第 4 行
update has been done successfully (1 行受影响)
例2、当对定义了删除型触发器的employee表进行删除操作时,首先检查删除几行,如果删除多行则返回提示信息,并回滚。
create trigger Delete_employee
on employee for delete
IF (@@rowcount=0) return
IF (@@rowcount>1)
begin
rollback transaction
raiserror('一下只能删除一条数据',16,1)
end
return
当删除一行时被触发。
上面是一些触发器的操作整理,希望对你有帮助!
【SQL SERVER】触发器(二)的更多相关文章
- sql server触发器的例子
发布:thebaby 来源:脚本学堂 [大 中 小] 本文介绍下,在sql server数据库中使用触发器的简单例子,有需要的朋友可以参考下,希望对你有一定的帮助. 原文地址:http:/ ...
- 15、SQL Server 触发器
SQL Server 触发器 触发器是一种特殊的存储过程,只有当试图用数据操作语言DML来修改数据时才会触发,DML包含对视图和表的增.删.改. 触发器分为DML触发器和DDL触发器,其中DML触发器 ...
- (转)SQL Server 触发器
SQL Server 触发器 触发器是一种特殊类型的存储过程,它不同于之前的我们介绍的存储过程.触发器主要是通过事件进行触发被自动调用执行的.而存储过程可以通过存储过程的名称被调用. Ø 什么是触发器 ...
- 自己写的sql server触发器练练--高手请您跳过吧
set ANSI_NULLS ONset QUOTED_IDENTIFIER ONgo ALTER TRIGGER [insertReplyToic] ON [dbo].[bbsReplyTopic] ...
- sql server 触发器详细应用
SQL Server 触发器 触发器是一种特殊类型的存储过程,它不同于之前的我们介绍的存储过程.触发器主要是通过事件进行触发被自动调用执行的.而存储过程可以通过存储过程的名称被调用. Ø 什么是触发 ...
- SQL server触发器中 update insert delete 分别给写个例子被。
SQL server触发器中 update insert delete 分别给写个例子以及解释下例子的作用和意思被, 万分感谢!!!! 主要想知道下各个语句的书写规范. INSERT: 表1 (ID, ...
- 在Sql Server触发器中判断操作是Insert还是Update还是Delete
在Sql Server触发器中判断操作是Insert还是Update还是Delete DECLARE @IsInsert bit, @IsUpdate bit, @IsDelete ...
- 喜忧参半的SQL Server触发器
SQL Server触发器在非常有争议的主题.它们能以较低的成本提供便利,但经常被开发人员.DBA误用,导致性能瓶颈或维护性挑战. 本文简要回顾了触发器,并深入讨论了如何有效地使用触发器,以及何时触发 ...
- SQL Server触发器
一﹕ 触发器是一种特殊的存储过程﹐它不能被显式地调用﹐而是在往表中插入记录﹑更新记录或者删除记录时被自动地激活.所以触发器可以用来实现对表实施复杂的完整性约`束. 二﹕ SQL Server为每个触发 ...
- SQL Server 触发器创建、删除、修改、查看示例
一﹕ 触发器是一种特殊的存储过程﹐它不能被显式地调用﹐而是在往表中插入记录﹑更新记录或者删除记录时被自动地激活.所以触发器可以用来实现对表实施复杂的完整性约`束. 二﹕ SQL Server为每个触发 ...
随机推荐
- Java 开发岗面试知识点
本文作者在一年之内参加过多场面试,应聘岗位均为 Java 开发方向.在不断的面试中,分类总结了 Java 开发岗位面试中的一些知识点. 主要包括以下几个部分: Java 基础知识点 Java 常见集合 ...
- OpenCV---模板匹配matchTemplate
作用有局限性,必须在指定的环境下,才能匹配成功,是受到很多因素的影响,所以有一定的适应性 模板匹配是一种最原始.最基本的模式识别方法,研究某一特定对象物的图案位于图像的什么地方,进而识别对象物,这就是 ...
- GridControl详解(五)设置行备注和行号
备注显示设置 设置备注字段 显示结果: 可以写入按键事件F3,用以开关备注显示 private void Form4_KeyUp(object sender, KeyEventArgs e) { if ...
- JavaScript arguments你不知道的秘密
(function test(x){ x=10; console.log(arguments[0], x); //undefined, 10 })(); (function test(x){ x=10 ...
- python学习笔记(十三)之lambda表达式
lambda表达式: 用法 lambda x : 2 * x + 1 其中:前面是参数,后面是返回值. >>> def ds(x): ... return 2 * x + 1 ... ...
- web上下文监听器ServletContextListener
1 package com.liveyc.common.listener; import javax.servlet.ServletContextEvent; import javax.servlet ...
- react-native关于ios的启动图标设置
1.首先我们需要使用xcode打开项目,选择项目中的images.xcassets这个文件夹 2.点击AppIcon可以看到右边出现针对不同设备的图标尺寸 3.在左边空白处右击,选择Import... ...
- solr笔记之安装部署到tomcat
1. 下载 solr 去官网下载,下载的时候选清华的镜像源,这个页面:https://mirrors.tuna.tsinghua.edu.cn/apache/lucene/solr/7.1.0/ 在/ ...
- Openflow Plugin学习笔记1
主入口 ConfigurableOpenFlowProviderModule是OpenFlowPlugin中启动加载的入口,如下: @Override public java.lang.AutoClo ...
- scrapy 爬虫踩过的坑(I)
问题1:正则表达式没问题,但是爬虫进不了item方法 分析: 1. 可能是下载不到list 页面的内容.可以用 scrapy shell url 进行测试 2. 可能是allowed_domains ...