SQL Server高级查询之常见数据库对象(数据库事务)第五章节

1.数据库事务

1.一个事务内的所有语句代码作为一个整体来执行。
要么全部执行,要么全部不执行。当遇到错误时可以回滚事务,取消事务内所做的改变,从而保证数据库中的数据一致性和可恢复性。

2.显示事务
(1.)begin transaction :启动事务
(2.)commit transaction:提交事务
(3.)rollback transaction:回滚事务,表明在事务执行过程中遇到错误,事务内所修改的数据会被回滚到事务执行之前的状态

3.案例练习

--客户雷亚波在零聚网购买了两份”菠萝爆肉片“和一件“资生堂菲婷” 编写存储过程实现该业务
if exists(select * from sysobjects where name='proc_insertOrders')		--查看数据库是否存在这个存储空间,如若存在则删除
	drop procedure proc_insertOrders
GO
create proc proc_insertOrders(
@ordersDate varchar(20)	,		--下单日期
@customerName varchar(20) ,		--客户姓名
@title1 varchar(50)	,			--第一件商品名
@quantity1 int ,				--第一件商品数量
@title2 varchar(50) ,			--第二件商品名
@quantity2 int					--第二件商品数量
)
as
declare @customerID int;		--客户编号
declare @productID1 int;		--第一件商品编号
declare @productID2 int;		--第二件商品编号
declare @orderID	int;		--订单编号
select @customerID=customerId from customer where customerName=@customerName
begin transaction				--启动事务
--添加订单表记录
insert orders(customerID,ordersDate) values(@customerID,convert(date,@ordersDate))
if @@error=0					--返回上一条执行SQL语句的错误号,如果为0表示订单表记录成功
begin
	select @orderID=max(ordersID) from orders	--获取新增订单的订单编号
	select @productID1=productID from product where title=@title1	--获取第一件商品编号
	--添加第一件商品到订单明细表
	insert ordersdetail values(@orderID,@productID1,@quantity1)
	select @productID2=productID from product where title=@title2	--获取第二件商品编号
	--添加第二件商品到订单明细表
	insert ordersdetail values(@orderID,@productID2,@quantity2)
	if @@error = 0				--添加订单表和添加订单明细表记录成功
	begin
		print '添加订单成功'
		commit transaction		--提交事务
	end
	else 
	begin
		print '添加订单失败'
		rollback transaction	--回滚事务
	end
end
else
begin
	print '添加订单失败'
	rollback transaction		--回滚事务
end

GO
--调用存储过程
exec proc_insertOrders '2021-9-27','雷亚波','菠萝爆肉片',2,'资生堂菲婷',1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值