mysql事务隔离级别总结

本文详细介绍了数据库事务的四大特性:原子性、一致性、隔离性和持久性,并对四种不同的事务隔离级别进行了阐述,包括它们可能遇到的问题及解决方案。
1.事务的基本特性:

    (1)原子性:事务是一组原子性的操作,这一组操作要么同时成功,要么同时失败,不会存在部分性成功和失败

    (2)一致性:事务执行前和事务执行后,数据都是保持正确的形态

    (3)隔离性:同时时间只允许一个事务对数据进行操作,不允许同时进行,但各个事务都可以正常运行,互不影响

    (4)持久性:一旦事务完成对数据的改变是永久性的,不可更改的

2.查看数据库事务级别:

    select @@tx_isolation; 默认为REPEATABLE-READ(可重复读)

3.事务的隔离级别分为:读未提交,读已提交,可重复读,串行化

4.事务隔离级别为read uncommitted(读未提交):

    (1)可能出现问题:脏读

    (2)问题描述:事务A读取了事务B未提交的数据,拿上读取的数据去做处理,但是它不知道,B由于某些原因,

    进行了事务回滚,A读到的就会出现脏数据。

    (3)解决办法:采用读提交的事务隔离级别

5.事务隔离级别为read committed(读已提交):

    (1)虽然解决了脏读的现象,但是出现的不可重复读的问题,也就是俩次读到的数据不一致

    (2)问题描述:事务A开始读取一条数据,此时事务B正在修改这条数据,但是事务B的事务未提交,

    而由于我们的事务隔离级别是读已提交,所以事务A不到事务B未提交的数据,但是当事务B提交后,

    事务A再去读的时候,读取的就是事务B修改提交后的数据,这样就造成了俩次读的数据不一致,即不可重复读

6.事务隔离级别为repeatable-read(可重复读)

    (1)数据库默认的事务隔离级别

    (2)解决了脏读的问题,重复读问题

    (3)可能出现幻读

    (4)问题描述:事务A读取一条数据,此时事务B正在修改这条数据,但是事务B未提交,所以事务A不会看到事务B

    的修改但未提交的数据(解决了脏读问题),当事务B执行commit后,事务A再次读这条数据时读到并不是事务B

    修改提交后的数据(解决了重复读问题),事务B可以看到修改的数据,但当我们在事务A对这条数据进行修改时,

    我们是对事务B修改提交后的数据进行修改的,而不是事务A看到的数据,保证了数据的一致性,还有一种特殊

    情况就是事务B执行了插入一条数据并提交了事务,事务A正在坐sum的时候并没有把事务B新添加的数据算进去,

    但是当事务A提交sum加上了事务B新添的数据,这就产生了幻读

    (5)解决办法:串性化
7.事务隔离界别为:serializable(串行化)
    (1)解决幻读现象
    (2)问题描述:事务A在执行查询时,事务B正在执行插入数据时,因为表被锁定了,所以插入失败,所以可以解决幻读
    (3)缺点:这样做会使并发性将低,所以不推荐使用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值