mysql知识点整理-1

本文详细梳理了MySQL数据库的事务隔离级别,包括读未提交、读已提交、可重复读和串行化,并重点讲解了MVCC的实现原理,特别是快照读和当前读的概念。此外,还深入探讨了幻读问题的产生和解决方案,以及在InnoDB引擎下READ-COMMITTED和REPEATABLE-READ的不同。
摘要由CSDN通过智能技术生成

1 数据库的事务隔离级别有那些

1.1 事务四大特性

在说事务的隔离级别之前,让我们先了解一下数据库事务的四大特性(ACID)分别是什么:

	A.原子性(Atomicity):原子性指数据库事务是一个不可分割的操作,要么全部执行成功,要么全部执行失败。在mysql中原子性是通过undolog实现。
	C.一致性(Consistency):官网上事务一致性的概念为:事务必须使数据库从一个一致性状态转换到另外一个一致性状态,也就是说事务按照预期生效,数据的状态是预期的状态。数据库的一致性由原子性、隔离性和持久性维护。
	I.隔离性(Isolation):在多个用户并发访问数据库时,数据库要为每一个用户开启一个事务,多个并发事务之间是隔离的。mysql通过mvcc和锁实现隔离性。
	D.持久化(Durability):一旦一个事务被提交,事务对数据库中的数据的修改是持久性的。mysql通过redo log实现持久化。

1.2 隔离级别

针对数据库事务的隔离性有四种隔离级别,分别是:读未提交、读已提交、可重复读和串行化,对于不同隔离级别,数据库产生的问题如下:

隔离级别 脏读 不可复读 幻读
READ-UNCOMMITED
READ-COMMITED x
REPEATABLE-READ x x
SERIALIZABLE x x x

mysql的默认隔离级别是可重复读,会产生幻读问题。
下面对脏读、不可复读和幻读进行解释一下:

  • 脏读:事务能够读取到未提交的数据,这种情况为脏读。
  • 不可复读:当一个事务在执行过程中,数据被另外一个事务修改,造成本次事务多次读取的信息不一致,这种情况为不可复读。
  • 幻读:当事务A读取某一个范围的数据时,另外一个事务B在这个范围内插入新的记录并提交,事务A再次读取该范围的数据时,就会产生幻读。

2.MVCC的实现原理

   MVCC全是为Multi-Version Concurrency Control,即多版本并发控制。MVCC是一种并发访问数据库的控制方法,一般在数据库管理系统中,实现对数据库的并发访问,在编程语言中实现事务内存。
	MVCC在MySQL的InnoDB中的实现主要是为了提高数据库并发性能,用更好的方式去处理读写冲突,做到即使有读写冲突时,也能做到不加锁,非阻塞并发读。
	在了解MVCC的实现是,让我们先了解一下当前读和快照读:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值