MySQL的并发读写问题、隔离级别、MVCC

关系型数据库:	MySQL、Oracle、DB2、SqlServer
NoSQL:			键值存储数据库(Redis、Memcached)、列存储数据库(HBase)、文档型数据库(mongoDb)、图形数据库(Neo4j)


Mysql事务:
	A(原子性)
	C(一致性)
	I(隔离性)
	D(持久性)
	
	行锁
	表锁
	
	并发读写问题
		脏读		读到其他事务未提交的数据
		不可重复读	读到其他事务已提交的数据,查询结果的数据不同
		幻读		查询结果的行数不同(可以用for update的方式解决或者cas)
	
	隔离级别
		读未提交	都可能
		读已提交	避免脏读
		可重复读	避免脏读、不可重复读			---------Mysql默认为可重复读(避免脏读和不可重复读)
		可串行化	避免脏读、不可重复读、幻读
		
		
	MVCC(Multi-Version Concurrency Control ,多版本并发控制)

		读未提交	无视图,直接返回记录上的最新值
		读已提交	每次select前都生成一个视图
		可重复读	第一次select前生成一个视图
		可串行化	隔离级别下直接用加锁方式来避免并行访问
        
        undo log有什么用?
        undo log主要有两个作用:回滚和多版本控制(MVCC)
        在数据修改的时候,不仅记录了redo log,还记录undo log,如果因为某些原因导致事务失败或回滚了,可以用undo log进行回滚
        undo log主要存储的也是逻辑日志,比如我们要insert一条数据了,那undo log会记录的一条对应的delete日志。我们要update一条记录时,它会记录一条对应相反的update记录。
        这也应该容易理解,毕竟回滚嘛,跟需要修改的操作相反就好,这样就能达到回滚的目的。因为支持回滚操作,所以我们就能保证:“一个事务包含多个操作,这些操作要么全部执行,要么全都不执行”。【原子性】
        因为undo log存储着修改之前的数据,相当于一个前版本,MVCC实现的是读写不阻塞,读的时候只要返回前一个版本的数据就行了。

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值