什么是事务
事务就相当于一个业务,比如银行系统中当的 账户转账,只与数据库当中的增删改有关系。
事务:一组逻辑操作单元,使数据从一种状态变换到另一种状态。
事务的四种性质
原子性:
事务开启后的所有操作要么全部做完,要么全部做完,比如银行转账系统,要么转账成功,要么转账失败,不能出现有个账户减少,一个账户不变
一致性:
事务前后,数据库的完整性没有被破坏。比如两个账户转账过程中,账户支出的钱和另外一个账户收入的钱是一样的。
数据库中的数据从一个一致性状态到另一种一致性状态。
隔离性(待加深理解):
多个用户并发访问数据库的时候,同时操作一张表的时候,数据库为每一个用户开启事务,一个线程的事务不能被其他线程的事务干扰。
持久性:
事务对数据库的改变是不能回滚的,接下来其他操作或者数据库故障都不会对该事务进行改变。
数据库的并发问题
对于同时运行的多个事务, 当这些事务访问数据库中相同的数据时, 如果没有采取必要的隔离机制, 就会导致各种并发问题:
脏读:
事务A读取了一个数据(这个数据为事务B改变后的数据,但没有提交),事务B将操作回滚,那么事务A读到的数据就不正确,称为脏读。
不可重复读
一个事务对一个数据进行读取的时候,不同的时间读取的结果不一致
幻读
两个事务,事务A对表进行读取获得数据,然后事务B向表中进行插入数据,事务A再次进行读取数据时发现表的数据增加了
数据库四种隔离级别
**读未提交:**事务可以读取其他事务已经修改但是没有提交的数据,脏读、不可重复读、幻读都会出现
**读已提交:**事务只能读取别的事务已经提交的数据。可以避免脏读,不可重复读、幻读可能会出现
可重复读:事务A读取一个字段,获取的数据是一样的,在事务A没有结束,其他的事务不能对该字段进行更新。脏读和不可重复可以避免,幻读不能解决
串行化: 事务进行,其他事务不能对表进行 增删改操作