Mardanjan / Blog

学习笔记(在issues里),一些小demo的源码在这里,demo在线地址会持续更新
1 stars 0 forks source link

事务 transaction #4

Open Mardanjan opened 4 years ago

Mardanjan commented 4 years ago

事务,一般是指要做的或所做的事情

概念:在关系数据库中,一个事务可以是一条sql语句,一组sql语句或整个程序

特性:事务是恢复和并发控制的基本单位

事务的四个特性:

1·原子性:一个事务是一个不可分割的工作单位,事务中包括的操作要么全做要么全不做(我主要用到的功能), 2·一致性:事务必须是使数据库从一个一致状态变到另一个一致性状态,一致性与原子性是密切相关的(不是很懂哈,欢迎在下面用白话补充) 3·隔离性:一个事务的执行不能被其它事务干扰,即一个事务内部的操作及使用的数据对并发的其它事务是隔离的,并发执行的各个事务之间不能相互干扰 4·持久性:也称永久性,指一个事务一旦提交,它对数据库中的数据的改变就应该是永久性的,接下来的其它操作或故障不应该对其有任何影响

例:
……关键语句讲解………
  BEGIN TRANSACTION
  /*--定义变量,用于累计事务执行过程中的错误--*/
  DECLARE @errorSum INT
  SET @errorSum=0 --初始化为0,即无错误
  /*--转账:张三的账户少1000元,李四的账户多1000元*/
  UPDATEbankSET currentMoney=currentMoney-1000
  WHERE customerName='张三'
  SET @errorSum=@errorSum+@@error
  UPDATE bank SET currentMoney=currentMoney+1000
  WHERE customerName='李四'
  SET @errorSum=@errorSum+@@error --累计是否有错误
IF @errorSum<>0 --如果有错误
  BEGIN
  print '交易失败,回滚事务'
  ROLLBACK TRANSACTION
  END?
  ELSE
  BEGIN
  print '交易成功,提交事务,写入硬盘,永久的保存'
  COMMIT TRANSACTION
  END
  GO
  print '查看转账事务后的余额'
  SELECT * FROM bank?
  GO