目录
1.为什么要使用事务
准备测试表:
--小飞账户减少2000
update accout set money=money-2000 where name ='小飞';
--四十大盗账户增加2000
update accout set money=money+2000 where name ='飞天大盜';
2.事务的概念
3.使用
4.特性
- 原子性: 保证多个操作被打包,成一个整体,要么能够全都执行正确,要么就一个都不执行
- 一致性: 事务执行之前,和事务执行之后,数据能对上.数据不能离谱
- 持久性: 事务这里执行的各种操作,都是持久生效的(最终写入到硬盘中的)一旦事务执行成功了,这里的所有操作产生的修改,都是写到硬盘里的
- 隔离性: 并发执行事务的时候,隔离性会在执行效率 和 数据可靠 之间做出权衡。"隔离"描述的是同时执行的事务之间相互的影响。隔离性越高, 并发性就越低. 数据越可靠,性能就越低
原子性可以可以类比于操作系统内核中的原语部分,一致性和持久性很容易理解,隔离性的话,要明白隔离和数据可靠相对应的,并发和运行效率,性能想对应的。
5.并发执行事务可能带来的问题
1.脏读:读到了写事务提交之前的中间数据(脏数据)
2.不可重复读:一个事务中,多次读取同一个数据,发现数据不一样 (在读的过程中,另一个事务修改了数据)
3.幻读:一个事务之内,多次读到的数据,值相同,但是结果集不同
6.MySQL的四种隔离级别
MySQL中提供了四种事务的隔离级别来方便我们解决5中的3个问题:
1.READ UNCOMMITTED
该级别指的是允许读未提交的数据,其隔离程度最小,易产生脏读,不可重复读,幻读的问题,同时该级别下事务的并发程度最高,执行效率最高。
2.READ COMMITTED
该级别指的是允许读已提交的数据(给写加锁),解决了脏读的问题,仍存在不可重复读和幻读的问题,隔离性相对提高一部分,并发程度有所降低。
3.REPEATABLE READ
该级别指的是允许重复读取数据(给读和写都加了锁),解决了脏读和不可重复读的问题,幻读问题未解决,隔离性进一步提高,并发程度进一步降低。
4.SERIALIZABLE
该级别事务彻底的串行执行,解决了脏读,不可重复读,幻读的问题,隔离性最高, 并发性最低(没有),数据最可靠,效率也最低。
ps:MySQL的默认隔离级别为第三种,也就是REPEATABLE READ
7.总结
事务因其原子性可以把多个操作打包为一个操作,要么同时执行成功,要么不执行,进行回滚。使得我们的操作更加的符合实际的操作需求,保证能得到预期的结果。
感谢大家能看到这里!!!阿里嘎多!!!