SqlServer触发器的基本使用

本文通过实例展示了SQL触发器的应用,包括DML和DDL触发器的创建及使用,涉及insert、update、delete操作对数据库表的影响和相应触发器的实现。
--触发器分类:
--1,DML触发器
	--1.1 insert         新增的记录保存在inserted表中
	--1.2 update		 旧的记录在deleted中,新的在inserted中
	--1.3 delete         刚刚删除的记录保存在 deleted表中
	--1.4 instead of     用来指定用DML触发器中的操作代替触发语句的操作
--2,DDL触发器   
--练习常用的  insert update delete 触发器
go 
use db_Test;
if exists (select * from sysobjects where name='book')
drop table book;
create table book(
	bookId int primary key,
	bookName char(20),
	bookPrice float,
	publishTime date,
	bookNum int         --书本的剩余数量
);
--借书记录
if exists (select * from sysobjects where name='borrowedBook')
drop table borrowedBook;
create table borrowedBook(
	bookId int,
	borrwDate Date,
	bookName char(20),
	borrowNum int --借书数量
)
go
--创建存储过程,向book表中插入10条数据
if exists (select * from sysobjects where name='addBook')
drop procedure addBook;
go
create procedure addBook as
begin
	declare @i int;
	set @i=1;
	while(@i<10)
	begin
		--cast 将一个表达式转化成另外一个类型
		insert into book select @i,'book '+cast(@i as CHAR(1)),(10+@i)/10.0,GETDATE(),@i;
		set @i=@i+1;
	end
end

go
--创建触发器,当向借书记录中添加一条图书记录时,修改原来书本的剩余数量
if exists (select * from sysobjects where name='borrowBook_trigger')
drop trigger borrowBook_trigger;
go
create trigger borrowBook_trigger on borrowedBook after insert as
begin
	declare @bookId int;
	declare @borrowNum int;
	--从inserted表中得到插入的数据的信息
	select @bookId=bookId,@borrowNum=borrowNum from inserted;
	--修改book表中的信息
	update book set bookNum=bookNum-@borrowNum where bookId=@bookId;
end

--创建触发器,当向借书记录中删除一条图书记录时,修改原来书本的剩余数量
if exists (select * from sysobjects where name='returnBook_trigger')
drop trigger returnBook_trigger;
go
create trigger returnBook_trigger on borrowedBook after delete as
begin
	declare @bookId int;
	declare @borrowNum int;
	--从deleted表中得到插入的数据的信息
	select @bookId=bookId,@borrowNum=borrowNum from deleted;
	--修改book表中的信息
	update book set bookNum=bookNum+@borrowNum where bookId=@bookId;
end

--创建触发器,当修改图书的信息(书名)时候,对应修改借书表中的信息(书名)
if exists (select * from sysobjects where name='updateBook_trigger')
drop trigger updateBook_trigger;
go
create trigger updateBook_trigger on book after update as
begin
	declare @bookId int;
	declare @newName char(20);
	--从inserted表中得到修改的数据的信息
	select @bookId=bookId,@newName=bookName from inserted;
	--修改borrowedBook表中的信息
	update borrowedBook set bookName=@newName where bookId=@bookId;
end
go
-- 测试数据:


--执行存储过程,向book表中插入数据
exec addBook;
--查看图书记录
select * from book;
--查看借书记录
select * from borrowedBook;

--向借书表中插入一条记录 借走id为2的书一本
insert into borrowedBook values (2,GETDATE(),'book2',1);
select * from book;
select * from borrowedBook;

--修改书本id为2的书名
update book set bookName='newBook' where bookId=2;
select * from book;
select * from borrowedBook;

--从借书表中删除记录
delete from borrowedBook where bookId=2;
select * from book;
select * from borrowedBook;

乐播投屏是一款简单好用、功能强大的专业投屏软件,支持手机投屏电视、手机投电脑、电脑投电视等多种投屏方式。 多端兼容与跨网投屏:支持手机、平板、电脑等多种设备之间的自由组合投屏,且无需连接 WiFi,通过跨屏技术打破网络限制,扫一扫即可投屏。 广泛的应用支持:支持 10000+APP 投屏,包括综合视频、网盘与浏览器、美韩剧、斗鱼、虎牙等直播平台,还能将央视、湖南卫视等各大卫视的直播内容一键投屏。 高清流畅投屏体验:腾讯独家智能音画调校技术,支持 4K 高清画质、240Hz 超高帧率,低延迟不卡顿,能为用户提供更高清、流畅的视觉享受。 会议办公功能强大:拥有全球唯一的 “超级投屏空间”,扫码即投,无需安装。支持多人共享投屏、远程协作批注,PPT、Excel、视频等文件都能流畅展示,还具备企业级安全加密,保障会议资料不泄露。 多人互动功能:支持多人投屏,邀请好友加入投屏互动,远程也可加入。同时具备一屏多显、语音互动功能,支持多人连麦,实时语音交流。 文件支持全面:支持 PPT、PDF、Word、Excel 等办公文件,以及视频、图片等多种类型文件的投屏,还支持网盘直投,无需下载和转格式。 特色功能丰富:投屏时可同步录制投屏画面,部分版本还支持通过触控屏或电视端外接鼠标反控电脑,以及在投屏过程中用画笔实时标注等功能。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值