一、ACID
A:Atomicity 原子性
我们把事务划分成原子一样,比方说a转钱给b,不能出现a扣了钱b没收到。所有环节中任意一个出错事务就必须回滚。
C:Consistency 一致性
事务必须使得数据库从一个一致性状态改变到另一个一致性状态。比方说a和b之间互相转钱,而a和b的资产总额有100w那么多,
那么怎么转都不会说总和部署100w
I:Isolation 隔离性
隔离性是当多个用户并发访问数据库时,比方说操作同一张表的时候,数据库为每一个用户开启的事务不能被其他的事务操作所干扰,多个并发事务之间要互相隔离。
D:Durability 持久性
持久性是指一个事务一旦被提交了那么对数据库中数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失对事务的操作。
二、脏读、不可重复度和幻影读
对于上面的隔离性I,因为以下几种情况,可以提出几种隔离机制
脏读:
事务a读取了事务b中尚未提交的数据
比方说我给你转了100万,还没提交,这时候你看多了100万很开心,但是我发现转错人撤回去了,这个过程你就读到了没提交事务的数据
不可重复读取(update)
对于在数据库中的某个数据,一个事务多次查询却返回了不同的数据,因为在查询的间隔,被另一个事务修改并提交了。
不可重复读取和脏读的区别是:前者读取了他人更新操作的·提交的数据,后者读取的他人更新操作时没提交的东西。
幻读(insert or del)
在两个连续的查找之间一个并发的修改事务修改了查询的数据集,导致这两个查询返回了不同的结果。,导致a多次读取的数据不一致,幻读和不可重复读的区别在于不可重复读为update操作,幻读为insert操作或者删除操作。
第一类事务丢失
A事务撤销时,把已经提交的B事务的更新数据覆盖了。例如:
这时候事务a撤销事务的时候,余额就变为1000
第二类事务丢失
根据第一类我们很容易推导出第二类事务更新丢失。A事务覆盖B事务已经提交的数据,造成B事务所做的操作丢失 。
解决方案
为了解决上述方案,数据库通过锁机制解决并发访问的问题。根据锁对象的不同我们分为行级锁和表级锁;直接使用锁机制管理很复杂,基于锁机制,数据库给用户提供了不同的事务隔离级别。隔离级别越高并发性越低。