数据库事务四大特性以及四大隔离级别

2022年8月30日08:14:54

1.数据库事务四大特性ACID

    原子性;Atomicity

    一致性;Consistency

    隔离性;Isolation

    持久性;Durability

原子性:失误包含的操作要么全部成功,要么全部失败回滚,回滚的事务操作不能对事物有任何影响

一致性:

其中AID都是数据库的特征,也就是依赖数据库的的具体实现,唯独这个C依赖于应用层,也就是开发者,这里的一致性指系统从一个正确的状态迁移到另一个正确的状态。当前的状态满足预定的约束就叫正确的状态,而事务里的一致性就是通过事务的AID来保证我们的一致性。C是目的,AID都是手段

隔离性:将多个事务隔离开,每个事务不会访问到其他事务操作过程中的状态

持久性:事务的操作,一旦提交,对数据库中的数据的改变是永久性的

当没有数据库隔离性时,多用户并发操作,可能会发生一些问题比如:

1.脏读

2.幻读(虚读)

3.不可重复读

脏读:一个事务读取了另一个未提交事务执行过程中的数据,会导致读取到的数据并非是最终持久化之后的数据,这个数据就是脏数据

不可重复读:对于数据库中的某个数据,一个事务执行过程中返回不同结果,就是在这个事务进行过程中这个数据被其他事务修改了

幻读:幻读是事务非独立进行时发生的一种现象,当事务A对一列值为1修改为2时,事务B新插入了一条该列为1的数据,此时事务A查看刚刚完成的操作的数据,发现还有一条没完成,其实这条是事务B刚刚插入的,这就是幻读。

幻读与不可重复读都是读取了另一已提交的事务,不同的是,不可重复读查询的都是同一数据项,幻读针对的是一批数据整体

M四大隔离级别

低级别的隔离一般支持更高的并发处理,并且拥有更低的系统开销

1.可重复读Repeatable Read

2.读取提交内容Read Commited

3.读取未提交内容Read Uncommitted

4.可串行化Serializable

Repeatable Read:MySQL默认的隔离级别。该级别解决了Read Uncommitted导致的的问题。他保证同一事务在执行时会看到同样的数据行,不过会导致幻读。InnoDB和Falcon存储引擎通过多版本并发控制机制解决了万都问题

Read Commited:大多数数据库系统默认的隔离级别(sqlserver,oracle),满足了隔离的简单定义。一个事务开始时,只能看到已提交事务所做的改变。一个事务从开始到提交前所有的改变都是不可见的除非提交。这种隔离级别会发生不可重复读。

Read Uncommitted:所有用户都能看到未提交事务的执行结果—>脏读

Serializable:最高级别。通过强制事务排序,使之不可能相互冲突,从而解决幻读的问题。即,给每个读的数据上加锁。在这个级别,可能导致大量的超时Time Out和锁竞争Lock Contention现象。

  • 作者:胡云台
  • 原文链接:https://blog.csdn.net/qq_36879870/article/details/88544581
    更新时间:2022年8月30日08:14:54 ,共 1155 字。