0
点赞
收藏
分享

微信扫一扫

[极客大挑战2019]upload

凌得涂 2024-02-21 阅读 10

    今天,作为新一年的第一篇文章,与大家分享关于MySQL事务和隔离级别的知识。在数据库管理系统中,事务是确保数据完整性和一致性的关键机制。通过事务,我们可以将多个数据库操作组合成一个逻辑单元,要么全部执行,要么全部不执行,从而确保数据的正确性和一致性。

    而隔离级别则是控制多个事务并发执行时如何相互影响的关键因素。不同的隔离级别提供了不同的数据可见性和并发性能,需要根据具体的业务需求和性能要求来选择合适的隔离级别。

    一个逻辑工作单元要成为事务,必须满足所谓的ACID(原子性、一致性、隔离性、持久性)属性。

原子性(Atomicity)事务开始后所有操作,要么全部做完,要么全部不做不可能停滞在中间环节。事务执行过程中出错,会回滚到事务开始前的状态,所有的操作就像没有发生一样。也就是说事务是一个不可分割的整体,就像化学中学过的原子,是物质构成的基本单位。

一致性(Consistency):事务开始前和结束后,数据库的完整性约束没有被破坏。比如A向B转账,不可能A扣了钱,B却没收到。

隔离性(Jsolation)同一时间,只允许一个事务请求同一数据,不同的事务之间彼此没有任何干扰。比如A正在从一张银行卡中取钱,在A取钱的过程结束前,B不能向这张卡转账。

持久性(Durability)事务完成后,事务对数据库的所有更新将被保存到数据库,不能回滚。小结:原子性是事务隔离的基础,隔离性和持久性是手段,最终目的是为了保持数据的一致性

总结:原子性是事务隔离的基础,隔离性和持久性是手段,最终目的是为了保持数据的一致性。


          

目录

案例:设置4种隔离级别,分析对mysql的影响。建议设置为read-committed事务级别

级别一:读未提交read-uncommitted:一个事务可以读到另一个事务未提交的结果为脏数据

级别二:读已提交read-committed:只有在事务提交后,其结果才会被其他事务看见

级别三:可重复读repeatable-read:无论事务对数据是否进行操作,事务是否提交,对于同一份数据的读取结果总是相同的。只有退出会话(事务)才能同步数据

级别四:串行化serializable:,隔离级别最高,牺牲了系统的并发性。就是锁表(不是行锁),事务修改表时并没有提交,禁止其他所有事务连接当前表


          

通过现象反映隔离级别效果:

           

四种隔离级别(MySQL默认Repeated Read,建议改为read committed):

                   

read committedRepeated Read在处理并发事务时区别

                      

隔离级别相关参数:

mysql> show variables like '%tx_isolation%';     ---默认REPEATABLE-READ对数据不安全。建议修改为READ-COMMITTED

                   

设置隔离级别:

mysql> set global tx isolation='READ-COMMITTED|READ-UNCOMMITTED|REPEATABLE-READ|SERIALIZABLE';
注:在会话和全局级别修改参数,都不会永久修改参数。永久修改参数只能将参数添加到my.cnf文件,然后重启生效。添加参数:transaction-isolation=READ-COMMITTED

                     

案例:设置4种隔离级别,分析对mysql的影响。建议设置为read-committed事务级别

级别一:读未提交read-uncommitted:一个事务可以读到另一个事务未提交的结果为脏数据

                   

级别二:读已提交read-committed:只有在事务提交后,其结果才会被其他事务看见

                     

级别三:可重复读repeatable-read:无论事务对数据是否进行操作,事务是否提交,对于同一份数据的读取结果总是相同的。只有退出会话(事务)才能同步数据

            

级别四:串行化serializable:隔离级别最高,牺牲了系统的并发性。就是锁表(不是行锁),事务修改表时并没有提交,禁止其他所有事务连接当前表

            

    好啦今天的内容结束了,希望这边文章可以让大家对事务和隔离级别有所了解。

举报

相关推荐

0 条评论