数据库事务隔离级别

    xiaoxiao2021-03-25  124

    数据库事务:数据库事务是指作为单个逻辑单元执行的一系列操作,这些操作是一组不可分割的工作单位;

    事务具有原子性(Atomicity),一致性(Consistency),隔离性(Isolation),持久性(Durability);

    原子性:事务所包含的操作要么全部成功,要么出错回滚;

    一致性:事务必须使数据库从一个一致性状态变到另一个一致性状态,例如约束了a+b=10,一个事务改变了a,那么b的值随之变化;

    隔离性:多个用户并发的访问数据库时,系统为一个用户开启的事务,不能被其他用户的事务所干扰;

    持久性:提交的事务将永久的改变数据库;

    在多个用户并发访问数据库时,系统就需要对各个事务进行隔离操作,否则容易出现数据不一致的情况,如:

    更新丢失:1. 更新丢失:两个事务同时更新,第二个事务的回滚覆盖了第一个事务更新的数据;2. 第二类更新问题:两个数据都读取到数据,并同时更新,第一个事物的更新被第二个事务覆盖;

    脏读:事务A读取到事务B还未提交的数据,然后事务B回滚操作,事务A就读到了脏数据;

    不可重复读:事务A第一次读取数据之后,事务B修改了数据,事务A再次读取数据,读到的值与第一次不一致;

    幻读:事务A读取范围数据时,事务B又添加或删除行,导致事务A读取到幻影行;

    数据库提供了4种隔离级别,分别是:

    读未提交(Read Uncommitted):只限制同一数据写事务禁止其他写事务,会引发脏读;

    读提交(Read Committed):只限制同一数据写事务禁止其他读写事务,解决脏读、更新丢失,未解决不可重复读;

    可重复读(Repeatable Read):限制同一数据写事务禁止其他读写事务,读事务禁止其它写事务(允许读)。解决不可重复读、更新丢失和脏读,未解决幻读,解决幻读需要增加范围锁或表锁;

    序列化( Serializable):最严格的事务隔离,限制事务一个接一个的执行,没有并发;

    数据库中除了MySQL默认为可重复读,大部分均为读提交;

    参考博客:http://www.2cto.com/database/201603/495078.html

    转载请注明原文地址: https://ju.6miu.com/read-9101.html

    最新回复(0)