数据库中事务的概念浅析

☆事务的概念
  事务指逻辑上的一组操作,组成这组操作的各个单元,要不全部成功,要不全部不成功。例如:A—>B转帐,对应于如下两条sql语句:

    update from account set money=money+100 where name='b';
    update from account set money=money-100 where name='a';

☆数据库开启事务命令
  start transaction 开启事务
  Rollback 回滚事务
  Commit 提交事务
  set transction isolation level 设置事务隔离级别
  select @@tx_isolation 查询当前事务隔离级别

☆事务的特性(ACID)
  原子性(Atomicity)原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。
  一致性(Consistency)事务必须使数据库从一个一致性状态变换到另外一个一致性状态。
  隔离性(Isolation)事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。
  持久性(Durability)持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来的其他操作和数据库故障不应该对其有任何影响。

☆事务的隔离性
  脏读指一个事务读取了另一个事务未提交的数据。这是非常危险的,假设 a 向 b 转账 100 元,a 在一台电脑上开启事务执行如下 2 步操作,向B存入100元,并把自己的钱减少100元:

    update account set money=money+100 while name='b'; 
    update account set money=money-100 while name='a';

当第1步执行完,第2步还未执行,a 未提交时,此时 b 查询自己的帐户就会发现自己多了100元钱,以为 a 转了100元。如果 a 等 b 走后再回滚,b 就会损失100元。
  不可重复读:在一个事务内读取表中的某一行数据,多次读取结果不同。例如银行想查询A帐户余额,第一次查询A帐户为200元,此时A(另一事务)向帐户内存了100元,此时A帐户为300元了,银行可能就会很困惑,不知道哪次查询是准的。和脏读的区别是,脏读是读未提交,不可重复读是读已提交。
  虚读:是指当事务不是独立执行时发生的一种现象,例如第一个事务对一个表中的数据进行了修改,这种修改涉及到表中的全部数据行。 同时,第二个事务也修改这个表中的数据,这种修改是向表中插入一行新数据。那么,以后就会发生操作第一个事务的用户发现表中还有没有修改的数据行,就好象 发生了幻觉一样。
☆事务的隔离级别
  多个线程开启各自事务操作数据库中数据时,数据库系统要负责隔离操作,以保证各个线程在获取数据时的准确性。
☆数据库共定义了四种隔离级别
  Read uncommitted(读未提交):最低级别,以上情况均无法保证。
  Read committed(读提交):可避免脏读情况发生。
  Repeatable read(可重复读):可避免脏读、不可重复读情况的发生。
  Serializable(串行化):可避免脏读、不可重复读、虚读情况的发生。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值