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



