系统又出现,用户的钱给多扣了,库存莫名给多了几个。
进销存出现的问题还是比交多的,看了很长时间都没有找到解决办法,
依稀记得之前去面试的时候面试官问到过我回滚的问题,当时没有回答好,回想常去面试一下也好。
今天去学习了一下数据库事务的一些知识。(总结一下)
一个简单的例子。
1 --通过事务执行转账 约束是金额不能小于10,所以当小于10 的时候就会出错。才能进入事务 2 begin transaction 3 declare @sum int = 0 4 update bank set balance = balance+10 where cld ='0001' 5 set @sum = @sum+ @@ERROR 6 update bank set balance = balance-10 where cld ='0002' 7 set @sum = @sum+ @@ERROR 8 --只要有一个sql 有错sum 就一定不是零,只要是sum不是零那就直接回滚, 9 if @sum <> 0 10 begin 11 --表示程序执行出错 --回滚 12 rollback 13 end 14 else 15 begin 16 --如果没有出错,则提交该事务 17 commit 18 end 19
事务的分类
---自动提交事务
-- 当执行一条sql语句的时候,数据库自己帮助我们打开一个事务,当语句执行成功,数据库自动提交事务,执行失败,数据库自动回滚事务 这也是我们常用到的。
insert into bbbb values (fsd)
--隐式事务
每次执行以下sql的时候,数据库自动帮我们提交一个事务,但是要我们手动提交,或者回滚
SET IMPLICIT_TRANSACTIONS{ON| OFF} 隐式事务
1 --打开隐式事务 2 SET IMPLICIT_TRANSACTIONS ON 3 insert into bank values ('0004',1000000) 4 commit --直不返回,数据库一直是锁这的。 5 SET IMPLICIT_TRANSACTIONS OFF --关闭隐式事务 6 SELECT *FROM bank
--显示事务:
需要手动打开事务,手动打开事务,手动提交事务或者回滚事务。
--需要手动打开事务,手动打开事务,手动提交事务或者回滚事务。 begin tran --.... commit tran -- rollback transaction
特别感谢:传智博客和B站 能是我在 这个网址 点击看链接 下学习到以上内容。
一些概念 数据库事务的总结