对事务的理解总结

实例:我给你转账,分为两步: 1.从我的账户扣100元钱 2.在你的账户加100元钱.
这两步要么全部执行,要么全部不执行,只有这样才不会早晨数据的错误
为了解决这个问题,就提出事务这个概念.

事务:
概念:事务就是一系列操作的集合,一个事务要么全部执行,要么全不执行.(把SQL 语句分组,每组就是一个事务,而每一组里面的语句要么全部执行,要么全部不执行 )

事务具体解决上述问题的办法
如果两步在执行时只执行第一步,第二步出问题了,执行不了,就会回滚,恢复原来数据,避免数据出现错(相当于两步都没有执行) 也就是说,避免在转账时,只在我这里扣了钱,而在你那里没有加钱.

事务的基本特性(ACID):
1.原子性:一组操作在执行过程中不能有其他因素干扰了这个操作
(用我的话说就是,整体性,一个事务就是一个整体,里面的SQL语句要么都执行,要么都不执行.就和我们做事一样,要么把事情做好,要么就不做这件事,不能做事做到一半就放弃).

2.一致性:事务将会数据库从一个一致状态变为另一一致状态(一个事务访问数据后,数据必须还是合法的,比如:在转账时:
a.我给你转-100元这就是不合法
b.我给你转100元,我这里就减掉100元,而你那里就加上100元,如果你那里没有加,这就属于不合法)

3.持久性:指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响(相当于做事就要坚持,不能老是被外物影响,不能以自己有其他事或者生病为借口,就不干了)

4.隔离性:事务允许多个用户对同一个数据进行并发访问,而不破坏数据的正确性和完整性。同时,并行事务的修改必须与其他并行事务的修改相互独立。(允许两个或者两个以上事务同时执行,但是这些事务相互之间不会有影响,两个用户对同一个数据进行操作,正在更新数据的一个用户,不会看到另个用户对数据未提交的更改)

隔离性(重点):隔离性就是为了解决并发过程中的问题

并发:并发是指一个处理器同时处理多个任务。(具体过程就是每个任务执行一小会儿,不断地的在几个任务之间切换,由于相隔时间短,宏观看就是一个处理器同时处理多个任务)

并行:并行是指多个处理器或者是多核的处理器同时处理多个不同的任务。(多个处理器同时工作,处理多个任务)

并发过程中的问题:
1.脏读:一个事务为写数据,另一个事务为读数据,两个事物并发.
第一个事务已经写完数据或者还没写完(反证就是未提交),第二个事务就开始读数据,读完数据之后,第一个事务发现数据写错了,就做出修改,然后提交,此时第二事务读取的数据就是错误的数据,这就是脏读 为了解决这个问题就可以给写操作加锁(要求写数据的时候不能读数据)

2.不可重复读:不可重复读指在一个事务内读取表中的某一行数据,多次读取结果不同。
一个事务包含两个操作,这两个操作都是读取同一个数据,但是两次结果都不同,不知道那一次结果是正确的.(两次结果不同的原因:另一个事务不断地对数据进行修改提交,导致两次读出的数据不同) 为了解决这个问题可以给读数据加锁(要求读数据的时候不能改数据)

3.幻读:虚读(幻读)是指在一个事务内读取到了别的事务插入的数据,导致前后读取不一致
上面对读数据加锁 仅仅只是对读某一个数据进行加锁,如果我们不是修改数据,而是加入一个新的数据,而此时我们多次读数据,会出现第二次读出的数据比第一次读出的数据多出一下,此时用户不知道那个数据是对的,这就叫幻读(虚度). 为了解决这个问题,进一步提高隔离性,我们使事务串行化(一个事务写数据时,其他事务啥都不干,一个事务读数据时,其他事物也啥都不干)

MySQL中的事务隔离级别(手动设置这个级别,调节并发性和隔离性)
1.read uncommitted 允许读取未提交数据,并行最大,隔离性最低,会产生脏读问题.
2.read committed 只允许读取提交数据,相当于写加锁并行降低了一点,隔离性提高了一点,能够避免脏读问题,但是存在不可重复读问题.
3.repeatable read,读写的时候都加锁,此时并行进一步降低,隔离性进一步提高,避免了不可重复读问题,存在幻读问题.
4.Serializable(串行化),严格串行执行,隔离程度最高,并行程度最低,能够避免幻读

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值