学习事务代理

首先学习事务代理的三大步骤:

1.什么是事务代理?

什么是事务?

        事务是一组原子操作单元,由一个有限的数据库操作序列构成。(百度百科:数据库事务)

        事务代理:在操作数据库(增删改)时,如果同时操作多条数据,我们希望要不全部成功,要不全部失败。这种情况称为事务代理。

2.为什么要学习事务代理?

        事务是为了解决数据安全而提出的,在数据的交互过程中,要不全部成功,要不全部失败。而不允许成功一半失败一半。

        通俗的将就是,你通过转账平台给朋友转了100元的过程中,你的账户减少100,同时你朋友的账户增加100,这个过程应该同步完成。而如果你的账户减 少了,而你朋友的账户没有增加。这样我们希望这笔钱最终退回到你的账户。这样的的一个过程也就是被称为事务代理。在这种特定的安全问题下,事务就应运而生。

3.该怎样去学习事务代理?

        学习事务代理,首先要明白事务的四个特性:(以下是来自于百度的解释)

        原子性(Atomicity):事务作为一个整体被执行,包含在其中的对数据库的操作要么全部被执行,要么都不执行。

        一致性(Consistency):事务应确保数据库的状态从一个一致状态转变为另一个一致状态。一致状态的含义是数据库中的数据应满足完整性约束。

        隔离性(Isolation):多个事务并发执行时,一个事务的执行不应影响其他事务的执行。

        持久性(Durability):已被提交的事务对数据库的修改应该永久保存在数据库中。

        

        在我个人的理解中,原子性指的就是事务是一个最小的整体单元,不可分割。有点像化学中的原子。而一致性是一个状态,只有成功和失败两个状态。隔离性指的是有多个事务在同时运行中,各个事务之间好像上了锁一样,互不干扰。持久性是对数据最终的状态的理解。

        事务的隔离级别:

        ISOLATION_READ_UNCOMMITTED:可以读未另一个事务提交的数据

        ISOLATION_READ_COMMITTED :只能读已提交的数据,(解决脏读问题,ORACLE默认)

        ISOLATION_REPEATABLE_READ:不能读取其他事务正在提交修改后的数据,解决不可以重复读问题

        ISOLATION_SERIALIZABLE:其他事务在查询时,不能提交增加获得删除后的数据,解决幻读问题(在一个事务操作时,例外一个事务不能提交,也不能查询)

        事务的并发问题:

        1.脏读:事务A读取了事务B的数据,事务B由于一些原因数据回滚了,那么事务A读取的数据是脏数据。

        解决方案:将事务的隔离级别设置为比READ_UNCOMMITED 更高的级别就可以。

        2.不可重复读:在事务A第一次读数据的时候数据时正常的,在数据读的过程中,数据被别人给修改或者覆盖了,导致第二次读到的数据与第一次不一致。

        解决方案:将事务的隔离级别设置为REPEATABLE_READ 就可以。

        3.幻读:事务A正在读取事务B的数据,而事务B则将事务A正在读取的数据删除了,导致同一个记录查询的数据不一致。

          解决方案:将事务的隔离级别设置为比READ_UNCOMMITED 更高的级别就可以。

    

转载于:https://my.oschina.net/u/4118675/blog/3041501

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值