• 技术文章 >数据库 >mysql教程

    数据库事务与其隔离级别

    2016-06-07 15:29:50原创514

    什么是数据库事务 数据库事务就是一系列的数据库操作。我对事务的理解就是事务是一系列要做的操作,并按照特定的顺序完成。例如:1.换上运动装。2.打篮球。3.洗澡。这三个操作便可以组成一个事务,并且顺序是确定的。这三个操作要么全都做,要么都不做,不能

    什么是数据库事务

    数据库事务就是一系列的数据库操作。我对事务的理解就是事务是一系列要做的操作,并按照特定的顺序完成。例如:1.换上运动装。2.打篮球。3.洗澡。这三个操作便可以组成一个事务,并且顺序是确定的。这三个操作要么全都做,要么都不做,不能出现如:只换上了运动装,打了篮球,而没有洗澡这样的情况。通过把一组相关的操作组成事务,可以使错误恢复更方便,并且能提高应用程序的可靠性。

    数据库事务的属性(ACID)

    原子性(Atomicity)

    我们提到数据库事务是一系列数据库操作的序列,而这一系列操作应当被视为一个整体。即这一系列操作要么全都执行,要么全都不执行,不能只执行一部分。这便是数据库事务的原子性。

    一致性(Consistency)

    事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。关系型数据库中,所有的规则必须应用到事务的修改上,以便维护所有数据的完整性。

    隔离性(Isolation)

    由并发事务所作的修改必须与任何其它并发事务所作的修改隔离。事务查看数据时数据所处的状态,要么是另一并发事务修改它之前的状态,要么是另一事务修改它之后的状态,事务不能查看中间状态的数据。这时事务将获得最高的隔离级别(可序列化)。

    持久性(Durability)

    事务完成之后,它对于系统的影响是永久性的。即使出现致命的系统故障这个修改也将一直保持。

    事务的隔离级别

    在对数据库进行并发访问的时候,如多个事务并发执行时,如果没有相应的机制对数据的并发访问进行控制,就会导致错误。比如事务A对数据进行了修改但还未提交修改,这是事务B读取了事务A修改过的数据,结果事务A进行了回滚,最终事务B读取到的数据就是不真实的,这就称为脏读。下面就从低到高介绍一下数据库事务的四种隔离级别,通过数据库隔离级别的设置对事务并发进行控制,从而减少错误的发生。

    未提交读

    最低级别的隔离,即一个事务可以访问另一个事务修改但未提交的数据。会引发丢失数据修改脏读不可重复读幻象等问题。

    已提交读

    事务只能读取其他写事务提交修改后的数据,避免了脏读的问题。但是这个事务在读取数据时,其他事务仍可以对数据进行修改并提交,所以就会导致多次读取统一数据的结果不一致,即不可重复读。很多数据库默认的就是这个级别。

    可重复读

    在这个隔离级别下,一个事务在读取数据时,其他事务不能对数据进行修改,因此就保证了同一事务多次读取数据的结果一致。但是这个隔离级别仍然不能保证不发生幻象问题。MySQL数据库默认为该级别。

    可串行化

    该级别是最高的隔离级别,从名字便可以看出,事务并发执行的结果和串行执行的结果一致。这个级别可以保证不出现幻象问题。

    总结

    数据库通过设置事务隔离级别对事务并发进行控制,可以减少并发问题。但是隔离级别应该按照需求来设置,不能一味的认为最高的隔离级别就是最好的。事务隔离是通过锁来实现的,事务隔离级别越高,则并发程度就越低。高级别的事务隔离会降低执行效率,因此应当根据需要来选择合适的隔离级别。

    php入门到就业线上直播课:查看学习

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。

    前端(VUE)零基础到就业课程:点击学习

    清晰的学习路线+老师随时辅导答疑

    自己动手写 PHP MVC 框架:点击学习

    快速了解MVC架构、了解框架底层运行原理

    上一篇:专栏:FRANK数据库深入浅出 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • ❤️‍🔥共22门课程,总价3725元,会员免费学• ❤️‍🔥接口自动化测试不想写代码?• MySQL存储过程高级SQL语句总结• 实例分析MySQL中pt-query-digest工具的使用记录• 一起聊聊Mysql两阶段锁和死锁• 深入理解MySQL索引优化器工作原理• 简单聊聊MySQL中join查询
    1/1

    PHP中文网