视频网站开发公司有哪些公司,生存曲线哪个网站可以做,wordpress帖子添加代码,五河网站建设哪家好1、简介 我们对于MySQL 很熟悉#xff0c;关于其特性都有一定的了解#xff0c;但是关于一些具体的实现原理#xff0c;有的小伙伴可能不太熟悉#xff0c;而且这部分知识在我们互联网大厂面试中是经常涉及的#xff0c;因此#xff0c;本文将带你深入底层#xff0c;顺…1、简介 我们对于MySQL 很熟悉关于其特性都有一定的了解但是关于一些具体的实现原理有的小伙伴可能不太熟悉而且这部分知识在我们互联网大厂面试中是经常涉及的因此本文将带你深入底层顺利通过面试。
2、MySQL 的四大特性 ACID
2.1、原子性Atomicity 原子性是指一个事务是一个不可分割的整体在一个事务的中的操作要么全部成功要么全部失败保持整体一致。
2.2、一致性 (Consistency) 一致性是指事务执行前后数据处于一种合法的状态这种状态是语义上的而不是语法上的。 这个状态是满足预定的约束就叫做合法的状态再通俗一点这状态是由你自己来定义的。满足这个状态数据就是一致的不满足这个状态数据就是不一致的
2.3、隔离性 (Isolation) 隔离性是指多个事务并发执行的时候一个事务内部的操作与其他事务是相互隔离的并发执行的各个事务之间不能互相干扰。
2.3.1、隔离级别
1、read uncommitted 读未提交两个事务之间能够相互读取对方的修改未提交的数据会产生脏读。
2、read committed 读已提交一个事物在操作过程中能够读取另一个事务已提交的数据会产生不可重复读。
3、Repeatable read可重复度在第一次读取操作时生成 ReadView并且对于记录的更新操作会对每一条被更新的记录加上next-key锁等价于行锁间隙锁。会产生幻读
4、Serializable串行化一个事务一个事务按顺序执行不会产生任何问题但是效率低。
2.3.2、数据库隔离级别操作
# 查看数据库的隔离级别
show variables like %isolation% # 在 MySQL 数据库中默认的事务隔离级别是 REPEATABLE READ
# 设置隔离级别
set session/global transaction isolation level 隔离级别;2.4、持久性 (Durability) 持久性是指事务一旦提交它对数据库的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。
3、几种特性实现原理
3.1、原子性undo log 实现 原子性的实现利用 Innodb 的 undo log。 undo log名为回滚日志是实现原子性的关键当事务回滚时能够撤销所有已经成功执行的sql语句他需要记录你要回滚的相应日志信息。
例如 1、当你delete一条数据时就需要记录这条数据操作信息回滚的时候insert这条旧数据。 2、当你update一条数据时就需要记录之前的旧值回滚的时候根据旧值执行update操作。 3、当年insert一条数据时就需要这条记录的主键回滚的时候根据主键执行delete操作。 undo log记录了这些回滚需要的信息当事务执行失败或调用了rollback导致事务需要回滚便可以利用undo log中的信息将数据回滚到修改之前的样子。
3.2、一致性 从数据库层面数据库通过原子性、隔离性、持久性来保证一致性。也就是说ACID四大特性之中C(一致性)是目的A(原子性)、I(隔离性)、D(持久性)是手段是为了保证一致性数据库提供的手段。数据库必须要实现AID三大特性才有可能实现一致性。
3.3、隔离性undo log 实现 隔离性的实现利用的是锁和MVCC机制。MVCC多版本并发控制Multi Version Concurrency Control,一个行记录数据有多个版本对快照数据这些快照数据在undo log中。 如果一个事务读取的行正在做DELELE或者UPDATE操作读取操作不会等行上的锁释放而是读取该行的快照版本。
注意在事务隔离级别为读已提交(Read Commited)时一个事务能够读到另一个事务已经提交的数据是不满足隔离性的。但是当事务隔离级别为可重复读(Repeateable Read)中是满足隔离性的。
3.4、持久化redo log实现 当做数据修改的时候不仅在内存中操作还会在redo log中记录这次操作。当事务提交的时候会将redo log日志进行刷盘(redo log一部分在内存中一部分在磁盘上)。当数据库宕机重启的时候会将redo log中的内容恢复到数据库中再根据 undo log 和 binlog 内容决定回滚数据还是提交数据。
redo log 特点
1、redo log体积小毕竟只记录了哪一页修改了啥物理记录因此体积小刷盘快。
2、redo log是一直往末尾进行追加属于顺序IO。效率显然比随机IO来的快。
3.5、二进制日志文件binlog 关于二进制文件的详细说明参考博客MySQL 和 Redis 如何保证数据一致性通过MySQL的binlog实现-CSDN博客
4、总结 本文详细介绍了MySQL的四大特性和隔离级别相关知识关于如何实现 MVCC 机制敬请关注后续内容更新以上知识点是我们在面试过程中经常遇到的问题掌握原理能够让我们更好使用MySQL。 本人是一个从小白自学计算机技术对运维、后端、各种中间件技术、大数据等有一定的学习心得想获取自学总结资料pdf版本或者希望共同学习关注微信公众号it自学社团。后台回复相应技术名称/技术点即可获得。本人学习宗旨学会了就要免费分享