ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

Mysql-事务 笔记

2019-10-12 12:01:18  阅读:261  来源: 互联网

标签:事务 log 幻读 笔记 提交 Mysql redo 重读


原文地址:http://www.zsythink.net/archives/1204

     http://www.zsythink.net/archives/1216

     http://www.zsythink.net/archives/1233

原文讲的很详细,以下为个人理解笔记。

概述 事务的ACID四大特性 A:atomicity 原子性   整个事务中的所有操作要么全部执行成功,要么全部执行失败后回滚到最初状态 B:consistency 一致性  数据库中式从一个一致性状态转为另一个一致性状态 C:isolation 隔离性 一个事务在提交前所做的操作是否能为其他事务课件,由于不同的场景需求不同,所以针对隔离性来说,有不同的隔离级别 D:durability 持久性 事务一旦提交,事务所做出的修改将会永久保存,此时即使数据库崩溃,修改的数据也不会丢失,   事务日志可分为redo log 和undo log 1、redo log :          mysql会将事务中的sql语句涉及到的所有数据操作先记录到redo log中,然后再将操作从redo log中同步到对应的数据文件中。例如修改50条数据,现将此操作记录到redo log中,然后再从redo log中一条一条同步到数据文件对应的记录中,即使出现打断比如停电,那么依靠redo log中的日志将剩余部分操作再次痛不痛对应的数据文件中。 2、undo log:         可以理解为数据修改之前的备份,比如事务进行到一半,有一条未执行成功,发生回滚,则需要根据undo log进行撤销,将修改过的数据从逻辑上恢复到修改之前的样子,
注:undo log 是逻辑日志,与redo log记录的页操作屋里日志不同 3、log group:     重做日志组,一个重做日志组中有多个重做日志文件,也就是多个redo log file。当日志组中的第一个log file被写满,则会将redo log写入到日志组中的下一个重做日志文件中,以此类推。如果全部被写满,则将redo log 再写入到第一个redo log file中覆盖原来的redo log,以便新的redo log 被写入。
            
      事务的4种隔离级别 1、READ-UNCOMMITTED: 读未提交        事务1位提交,事务2就可以看到事务1 所做的修改 当前事务能够看到其他事务中未提交的数据,这种现象叫做脏读。同时也会出现幻读和不可重读的问题。   此隔离级别并发是最强的,但是隔离性和安全性是最差的。    2、READ-COMMITTED:读已提交或者读提交         事务1未提交,事务2 无法看到事务1中的修改,而当事务1提交后,事务2中即可看到事务1中的修改。 会出现幻读问题和不可重读问题(注:不可重读不要理解为一定不可重读,可以理解为不一定可重读) 幻读出现为事务2 的多次读取,然后事务1 在此期间已提交了插入或者删除操作 不可重读是在事务2 多次读取,事务1在此期间提交了修改操作 两者在某些地方均叫做幻读,而且mysql官方文档也将不可重读归为幻读,只是单价为了更加细化他们的区别。   3、REPEATABLE-READ:可重读              事务1提交了,事务2 在未提交之前事务2中查到的数据是相同的。  此级别会出现幻读问题。   4、SERIALIZABLE:串行化          事务1未提交事务2的查询语句被阻塞    不会出现幻读的问题,但失去了并发的能力,此隔离国域严格,所以很少讲隔离级别设置为串行化       总结脏读、幻读、不可重读的区别 脏读:当前事务可以查到别的事务未提交的数据(侧重点在于别的事务未提交) 幻读:幻读的表象与不可重读的表象都让人懵逼,很容易混淆,但是如果细分则可以理解为幻读侧重于数据的新增和删除,标示在同一事务中,使用相同的查询语句,第二次查询时,莫明多出来一些之前不存在的数据,或者莫明的不见了一些数据 不可重读:不可重读的侧重点在于更新修改数据,标示在同一事务中,查询相同的数据范围是,同一个数据资源莫明的改变了。

标签:事务,log,幻读,笔记,提交,Mysql,redo,重读
来源: https://www.cnblogs.com/liyante/p/11660727.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有