Mysql事务管理,隔离性

1.事务

1>什么是事务管理

事务是数据库中的最小执行单元,不可拆分,要么全都执行成功,要么全都执行失败。

2>手动事务管理

事务管理:开启事务--提交事务/事务回滚
数据库中事务管理默认开启的。
    -增删改执行时,在他们执行之前,事务自动开启,执行成功,事务自动提交。
    -查不涉及事务
    
    -如何查看数据库的事务管理是否开启?
    show variables like 'autocommit';
    -设置事务管理关闭
    set autocommit=off;
    -事务相关命令:
    begin: 开启事务
    commit:提交事务
    rollback:事务回滚

3>事务的特点

原子性:事务是最小执行单元,不可再分,要么全都成功,要么全都执行失败。
一致性:事务从一个valid(有效的)状态切换成另个一个有效的状态。
隔离性:事务之间彼此隔离的,互不影响(是指事务的内部对外不可见)。
持久性:事务提交后,所做的操作会持久化到数据库中。

4>事务的隔离级别

读未提交:read uncommited

事务未提交和回滚前对外可见,会产生脏读问题。

读已提交:read commited(修改)

隔离级别为读已提交,解决了脏读问题,但是产生新的问题:不可重复读 不可重复读产生的原因:在事务A执行期间,其他事务对用户1的数据进行了修改 如何解决不可重复读问题:给事务操作的数据加锁

可重复读:repeatable read(增删)

给事务操作的数据加锁

产生的问题:可重复读可以解决不可重复读的问题,但是会产生幻读。

幻读产生的原因:事务A执行期间,允许其他事务对表进行了增删操作,从而导致幻读

解决办法:给表加锁

可串行化:serializable

解决方案:增加表锁,查询时不允许其他事务进行增删操作,由此解决了幻读的问题

隔离级别以及可能会产生的问题

脏读不可重复读幻读
读未提交
读已提交×
可重复读××
可串行化×××
注意:
不可重复读和幻读很像,都是同一个事务中前后两次查询的数据不一致。
不可重复读是前后查询到同一条数据不同,针对的是修改操作
幻读是前后两次查询到的数据总量不同,针对的是增删操作
​
特点:隔离级别最高,并发执行效率是越低

数据库默认的隔离级别

mysql默认的隔离级别是可重复读
sql server 和 oracle的默认隔离级别均为读已提交
​
注意:mysql的隔离级别为可重复读,但是不会产生幻读,如何解决幻读的?
    mysql在事务中会采用快照读保留事务第一次查询到的数据,后续若再    次执行相同的查询,直接读取快照即可。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值