Mysql事务

.1.事务是干啥,核心是为了解决数据库的原子性~~回滚

2.事务的特性

(1)原子性(最核心的性质)

事务的根本所在(事务存在的意义),能把多个SQL语句打包成一个整体,要么都执行完,要么一个都不执行.(如果执行的过程中出错误,则自动回滚).

(2)一致性

事务前后执行后,数据保持"一致性".

(3)持久性

事务在执行后,读写在硬盘中,不会随着重启/关机而丢失.

(4)隔离性(面试中重要的问题)

隔离性存在的意义就是并发执行事务的时候,尽量不出现问题.

隔离性中有三个问题

1.脏读

A事务在修改数据,提交之前,B事务读取了数据,此时A事务提交的时候可能提交的是不同的数据(A修改了数据),这时B读取就是脏数据指的是无效的数据.

解决方法

A同学与B同学商量了一下A在修改的过程中B同学无法进行读取,在A同学提交后B同学才能进行读,这就加了一个锁称为写锁.

2.不可重复读

A事务多次读取同一个数剧,发现数据不一样

A同学在进行读取的时候,B同学对数据进行了修改,A同学读着读着发现数据改变了.

解决办法

两个同学商量,A同学在读取的时候,B同学不能对数据进行修改,A同学读完了B同学才能修改数据,这就加了一个锁,称为读锁.

3.幻读

幻读是一种特殊的不可重复读

A同学在读取Helloword.java文件时B同学在Test.java文件上进行修改,A同学读完Helloword.java文件后发现结果集发生了改变,但是并没有影响自己读取文件,这种情况就叫做幻读.

解决办法

串行化,一个一个事务来完成,事务A完全完成后才能进行事务B.

上述每次加一个锁,并发程度降低了(效率降低)但是隔离性提高了(指数据的准确性提高了)

Mysql提供给我们"隔离级别的选型",给了四个档位,根据不同的需求来选择不同的档位.

1.read uncommitted 允许读未提交的数据,并发性最高,隔离性最低,可能存在脏读/不可重复读/幻读

2.read committed 只能读取提交后的事务,相当于写加锁,并发程度降低,隔离性提高,可能存在不可重复读/幻读

3.repeatable read(默认状态)加上了写锁和读锁,并发程度再次降低,隔离性提高,可能存在幻读

4.serializable 严格执行串行化,并发程度最低,隔离性最高,解决了脏读/不可重复读/幻读问题,效率最低.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值