背景

图片.png

  1. --事务
  2. --aa转账1000bb
  3. SELECT *FROM [dbo].[bank]
  4. name cmoney
  5. ---------- ---------------------
  6. aa 1000.00
  7. bb 1.00
  8. Update bank Set cmoney=cmoney-1000 where name='aa'
  9. Update bank Set cmoney=cmoney+1000 where name='bb'
  10. --Result:第一条执行失败,第二条执行成功
  11. --ERRMEG:
  12. --The UPDATE statement conflicted with the CHECK constraint "CK_bank". The conflict occurred in database "FSLab", table "dbo.bank", column 'cmoney'.
  13. --The statement has been terminated.
  14. name cmoney
  15. ---------- ---------------------
  16. aa 1000.00
  17. bb 1001.00
  18. --上面这种情况要求我们需要 使用某一种方式进行处理,这种方式就叫做事务
  19. --事务:就是指这些语句要么都执行成功,要么都不执行--事务只是一种处理机制
  20. --事务是对有可能对数据进行更改的操作而言--增加删除和修改。对查询没有用。
  21. --事务的特点:CUID
  22. 1.原子性:事务不可以再分了,事务必须是原子工作单元;对于其数据修改,要么全都执行,要么全都不执行;
  23. 2.隔离性:每一个事务是独立的,不受其他事务影响;
  24. 3.一致性:事务处理前后,数据需要保持某种程度的一致性;
  25. 4.持久性:事务一旦提交,对数据的修改永久保留;
  26. --如何使用事务:将你执行的增加删除和修改命令包含再事务的开启和提交 或者开启和回滚之间。
  27. 1.事务开启:Begin Transaction
  28. 2.事务提交:Commit Transaction
  29. 3.事务回滚:Rollback Transaction
  30. --使用事务进行转账
  31. Begin Transaction
  32. Update bank Set cmoney=cmoney-1000 where name='aa'
  33. IF(@@ERROR<>0) --说明这一句的执行出现错误
  34. RollBack Transaction --不可能某一句出现错误就立刻就进行提交或者回滚
  35. Update bank Set cmoney=cmoney+1000 where name='bb'
  36. IF(@@ERROR<>0) --说明这一句的执行出现错误
  37. RollBack Transaction
  38. --Result
  39. --The UPDATE statement conflicted with the CHECK constraint "CK_bank". The conflict occurred in database "FSLab", table "dbo.bank", column 'cmoney'.
  40. --The statement has been terminated.
  41. Declare @ErrorCode int=0 --记录执行语句有可能出现的错误号
  42. Begin Transaction
  43. Update bank Set cmoney=cmoney-1000 where name='aa'
  44. Set @ErrorCode+=@@ERROR --只是做一个错误号的累加
  45. Update bank Set cmoney=cmoney+1000 where name='bb'
  46. Set @ErrorCode+=@@ERROR
  47. IF(@ErrorCode<>0) --有错误
  48. Rollback Transaction
  49. Else
  50. Commit Transaction
  51. --Result:
  52. --The UPDATE statement conflicted with the CHECK constraint "CK_bank". The conflict occurred in database "FSLab", table "dbo.bank", column 'cmoney'.
  53. --The statement has been terminated.