T-Sql(六)触发器(trigger)
不知不觉讲到触发器了,一般我们做程序的很少接触到触发器,触发器的操作一般是DB人员来完成。
然而有的时候一些简单的业务需要我们自己去完成,不能每次都去麻烦DB人员,所以说,编程人员要全才,除了编程以为的专业知识也要涉猎,比如js,css,html,t-sql等一些语法,不一定要去精通,但是要熟悉,至少语法可以看懂,这样对我们的编程有事半功倍的效果,出现异常错误,我们也方便调试,以便最快找出错误。
言归正传,什么事触发器,顾名思义,就是你做一个操作,就会触发另一个事件,去执行一些操作。
比如你点烟花,点是一个动作,烟花是另一个动作,点动作完成就会触发烟花这个动作。
还有就是触发器必须依附一个主体,比如依附于某一张表,就像编程中事件这个概念。
下面我们通过一个简单的实例,和大家一步一步的来理解和运用触发器。
实例要求:
1,建商品表(Store),订单表(orders),日志表(Logs)
2,创建订单表插入触发器,实现插入一条订单信息,商品表中商品数量相应减少,订单中的总金额相应增加。
3,创建订单表更新触发器,实现更新一条订单信息,商品表中商品数量相应变化,订单中的总金额相应变化。(和2类似)
4,创建日志表触发器,实现更新商品表价格变化情况。
1,创建商品表(Store),订单表(orders),日志表(Logs)
第一步没什么讲解,我们创建表,并加一些示例数据。
示例代码:
create table Store
(
ID uniqueidentifier primary key,
ProductID int not null,
ProductPrice money not null default 1,
ProductCH nvarchar(80) not null,
ProductDate datetime not null,
NowNumber int not null
);
create table orders
(
OrderID int primary key,
ProductID int not null,
BuyNumber int Not null default 1,
BuyPricr money not null,
NowOrderPrice money default 0
)
create table Logs
(
ID uniqueidentifier primary key,
operatedatetime datetime,
ProductID int,
oldprice money,
newprice money
); insert into dbo.Store
values(NEWID(),1001,5000,'联想','2011-9-1',50)
insert into dbo.Store
values(NEWID(),1002,6000,'apple','2011-9-1',50)
insert into dbo.orders(OrderID,ProductID,BuyNumber,BuyPricr)
values(10013,1001,5,6000)
2,创建订单表触发器
要求2,3类似操作我在一起讲解了。
先看示例代码:
create trigger tri_order_NowOrderPrice
on orders after insert
as
begin
declare @NowOrderPrice money;
declare @BuyNumber int;
declare @ProductID int;
select @ProductID= ProductID,@BuyNumber= BuyNumber from inserted;
select @NowOrderPrice=inserted.BuyNumber * inserted.BuyPricr from inserted;
update orders set NowOrderPrice=@NowOrderPrice where ProductID=@ProductID;
update Store set NowNumber=NowNumber-@BuyNumber where ProductID=@ProductID;
end; create trigger tri_store_NowOrderPrice2
on orders after update
as
begin
declare @NowOrderPrice money;
declare @ProductID int;
declare @BuyNumber1 int;
declare @BuyNumber2 int;
select @ProductID= ProductID from inserted;
select @BuyNumber1=BuyNumber from inserted;
select @NowOrderPrice=inserted.BuyNumber * inserted.BuyPricr from inserted;
select @BuyNumber2=deleted.BuyNumber from deleted where ProductID=@ProductID;
update orders set NowOrderPrice=@NowOrderPrice where ProductID=@ProductID;
update Store set NowNumber=NowNumber-(@BuyNumber1-@BuyNumber2) where ProductID=@ProductID;
end;
触发器的关键字是trigger,语法是,on 表名 after 操作名称(一般为insert,update,delete),begin end中写一些触发器的处理操作。
inserted获取insert之后的数据。语法就是这么简单。
3,创建日志表触发器
日志表触发器要做的操作就是记录商品价格变化,那对应就应该在商品表中创建触发器。
示例代码:
create trigger tri_NowOrderPrice4
on dbo.Store after insert,update,delete
as
begin
if exists(select *from inserted) and exists(select *from deleted)
begin
print('update');
declare @price1 money;
declare @price2 money;
declare @datetime datetime;
select @price1=ProductPrice from deleted;
select @price2=ProductPrice from inserted;
if @price1!=@price2
begin
declare @ProductID int;
select @ProductID=ProductID from inserted
insert into Logs(ID,operatedatetime,ProductID,oldprice,newprice)
values(newid(),convert(datetime,getdate()),@ProductID,@price1,@price2) select *from dbo.Logs
end
end
else if exists(select *from inserted)
begin
print('insert');
end
else if exists(select *from deleted)
begin
print('delete');
end
else
begin
print('others');
end
end
触发器就是这些内容,有关触发器的一些复杂操作希望大家有时间研究下,讲的不好请大家多多指正,希望大家学好t-sql语言。
以后继续整理编程相关内容,希望大家多多关注。。。。
T-Sql(六)触发器(trigger)的更多相关文章
- PL/SQL 07 触发器 trigger
--触发器 触发器有三类: 数据操作触发器 用before触发器进行数据校验 用after触发器进行级联操作 语句触发器限制数据的操作和记录操作日志 instead of 触发 ...
- SQL入门(3):定义约束/断言assertion/触发器trigger
本文介绍数据库的完整性 完整性控制程序: 指定规则,检查规则 (规则就是约束条件) 动态约束 intergrity constraint::=(O,P,A,R) O : 数据集合, 约束的对象 ?: ...
- MySQL数据库触发器(trigger)
MySQL触发器(trigger):监视某种情况并触发某种操作 一:四要素 触发时间:before/after 地点:table 监视操作:insert/update/delete 触发操作:inse ...
- SQL Server 触发器
触发器是一种特殊类型的存储过程,它不同于之前的我们介绍的存储过程.触发器主要是通过事件进行触发被自动调用执行的.而存储过程可以通过存储过程的名称被调用. Ø 什么是触发器 触发器对表进行插入.更新.删 ...
- mysql之触发器trigger
触发器(trigger):监视某种情况,并触发某种操作. 触发器创建语法四要素:1.监视地点(table) 2.监视事件(insert/update/delete) 3.触发时间(after/befo ...
- mysql之触发器trigger 详解
为了梦想,努力奋斗! 追求卓越,成功就会在不经意间追上你 mysql之触发器trigger 触发器(trigger):监视某种情况,并触发某种操作. 触发器创建语法四要素:1.监视地点(table) ...
- Oracle数据库编程:使用PL/SQL编写触发器
8.使用PL/SQL编写触发器: 触发器存放在数据缓冲区中. 触发器加序列能够实现自动增长. 在触发器中不能使用connit和rollback. DML触发器 ...
- mysql之触发器trigger(1)
触发器(trigger):监视某种情况,并触发某种操作. 触发器创建语法四要素:1.监视地点(table) 2.监视事件(insert/update/delete) 3.触发时间(after/befo ...
- sql server触发器的例子
发布:thebaby 来源:脚本学堂 [大 中 小] 本文介绍下,在sql server数据库中使用触发器的简单例子,有需要的朋友可以参考下,希望对你有一定的帮助. 原文地址:http:/ ...
- 15、SQL Server 触发器
SQL Server 触发器 触发器是一种特殊的存储过程,只有当试图用数据操作语言DML来修改数据时才会触发,DML包含对视图和表的增.删.改. 触发器分为DML触发器和DDL触发器,其中DML触发器 ...
随机推荐
- java分享第十七天-03(封装操作mysql类)
JAVA操作mysql所需jar包:mysql-connector-java.jar代码: import java.sql.*; import java.util.ArrayList; import ...
- hadoop---前期准备---屌丝
hadoop要求有多台机子进行后续的数据处理,作为屌丝一枚,怎么才能搭建一个合适的环境学习hadoop?这就是本篇将要介绍的----前期准备. 搭建环境没啥好说的,说一下搭建环境多需要的吧 硬件:电脑 ...
- Java NIO4:Socket通道
Socket通道 上文讲述了通道.文件通道,这篇文章来讲述一下Socket通道,Socket通道与文件通道有着不一样的特征,分三点说: 1.NIO的Socket通道类可以运行于非阻塞模式并且是可选择的 ...
- [.net 面向对象程序设计进阶] (14) 缓存(Cache) (一) 认识缓存技术
[.net 面向对象程序设计进阶] (14) 缓存(Cache)(一) 认识缓存技术 本节导读: 缓存(Cache)是一种用空间换时间的技术,在.NET程序设计中合理利用,可以极大的提高程序的运行效率 ...
- 完全使用一组 DSL 来操作 Grid 控件
最近尝试了一下将 XtraGrid 的初始化工作封装成内部 DSL,例如一个普通的基础数据的增删改查操作的代码会像下面这样: public partial class UserForm : XtraF ...
- C语言 · 回文数
问题描述 1221是一个非常特殊的数,它从左边读和从右边读是一样的,编程求所有这样的四位十进制数. 输出格式 按从小到大的顺序输出满足条件的四位十进制数. 方案一: int main(){ int ...
- spring快速入门(一)
对于为什么使用spring框架,这里不多做解释,详情请百度.本人推荐面向驱动程序学习,通过实战来瞧瞧spring技术的伟大.所以先来看看原始开发一个简单的例子,由例子引入spring相关的技术.如果错 ...
- angularjs中provider,factory,service的区别和用法
angularjs中provider,factory,service的区别和用法 都能提供service,但是又有差别 service 第一次被注入时实例化,只实例化一次,整个应用的生命周期中是个单例 ...
- 【夔堂】:程序血泪史之——有一种垃圾语言叫做JavaScript
"Prototype"机制是个半成品OOP,有些文章说这玩意当初为了"简单(编写).容易(学习)"而发明的,但web前端技术发展到今天我们看到,JS显然是需要O ...
- linux 系统内核空间与用户空间通信的实现与分析<转>
linux 系统内核空间与用户空间通信的实现与分析 2 评论: 陈鑫 (chen.shin@hotmail.com), 自由软件爱好者, 南京邮电学院电子工程系 2004 年 7 月 01 日 内容 ...