0
点赞
收藏
分享

微信扫一扫

java事务+隔离级别

Android开发指南 2022-03-20 阅读 65
java

什么是事务

事务就相当于一个业务,比如银行系统中当的 账户转账,只与数据库当中的增删改有关系。
事务:一组逻辑操作单元,使数据从一种状态变换到另一种状态。

事务的四种性质

原子性:

事务开启后的所有操作要么全部做完,要么全部做完,比如银行转账系统,要么转账成功,要么转账失败,不能出现有个账户减少,一个账户不变

一致性:

事务前后,数据库的完整性没有被破坏。比如两个账户转账过程中,账户支出的钱和另外一个账户收入的钱是一样的。
数据库中的数据从一个一致性状态到另一种一致性状态。

隔离性(待加深理解):

多个用户并发访问数据库的时候,同时操作一张表的时候,数据库为每一个用户开启事务,一个线程的事务不能被其他线程的事务干扰。

持久性:

事务对数据库的改变是不能回滚的,接下来其他操作或者数据库故障都不会对该事务进行改变。

数据库的并发问题

对于同时运行的多个事务, 当这些事务访问数据库中相同的数据时, 如果没有采取必要的隔离机制, 就会导致各种并发问题:

脏读:

事务A读取了一个数据(这个数据为事务B改变后的数据,但没有提交),事务B将操作回滚,那么事务A读到的数据就不正确,称为脏读。

不可重复读

一个事务对一个数据进行读取的时候,不同的时间读取的结果不一致

幻读

两个事务,事务A对表进行读取获得数据,然后事务B向表中进行插入数据,事务A再次进行读取数据时发现表的数据增加了

数据库四种隔离级别
**读未提交:**事务可以读取其他事务已经修改但是没有提交的数据,脏读、不可重复读、幻读都会出现
**读已提交:**事务只能读取别的事务已经提交的数据。可以避免脏读,不可重复读、幻读可能会出现
可重复读:事务A读取一个字段,获取的数据是一样的,在事务A没有结束,其他的事务不能对该字段进行更新。脏读和不可重复可以避免,幻读不能解决
串行化: 事务进行,其他事务不能对表进行 增删改操作
在这里插入图片描述在这里插入图片描述在这里插入图片描述

举报

相关推荐

0 条评论