mysql的事务是innodb存储引擎独有的,myisam存储引擎不支持事务. 事务最经典的例子就是转账了,事务要保证的是一组数据库的操作要么全部成功,要么全部失败.是为了保证高并发场景下数据的正确性而定义. 事务并非mysql独有.在mysql中,数据库的事务隔离采用的是MVCC结合锁来实现的. 我是李福春,今天的问题是,mysql是如何实现事务隔离的?在实际开发中应该如何正确的使用事务? ACID特性 事务首先具备ACID特性,即 Atomic原子性, Consistency一致性 Isol…
作者:小林coding 图解计算机基础网站:https://xiaolincoding.com/ 大家好,我是小林. 之前写过一篇 MySQL 的 MVCC 的工作原理,最近有读者在网站上学习的时候,评论区指出了一些问题. 而这个知识点很重要,面试太常问了,所以,我就重写了这篇文章!开车! 正文 这是我的钱包,共有 100 万元. 今天我心情好,我决定给你的转账 100 万,最后的结果肯定是我的余额变为 0 元,你的余额多了 100 万元,是不是想到就很开心? 转账这一动作在程序里会涉及到一系列…
学习关系型数据库MySQL是很好的切入点,大部分人工作中用惯了CRUD,对面试官刨根问底的灵魂拷问你还能对答如流吗?我们有必要了解一些更深层次的数据库基础原理. 文章每周持续更新,各位的「三连」是对我最大的肯定.可以微信搜索公众号「 后端技术学堂 」第一时间阅读(一般比博客早更新一到两篇) 整理了面试中,关于MySQL事务和存储引擎10个FAQ(Frequently asked questions),你想知道的都在这里. 什么是事务? 事务就是「一组原子性的SQL查询」,或者说一个独立的工作单元…
众所周知,事务和锁是mysql中非常重要功能,同时也是面试的重点和难点.本文会详细介绍事务和锁的相关概念及其实现原理,相信大家看完之后,一定会对事务和锁有更加深入的理解. 本文主要内容是根据掘金小册<从根儿上理解 MySQL>整理而来.如想详细了解,建议购买掘金小册阅读. 什么是事务 在维基百科中,对事务的定义是:事务是数据库管理系统(DBMS)执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成. 事务的四大特性 事务包含四大特性,即原子性(Atomicity).一致性(Consiste…
面试官:要不你来讲讲你们对MySQL是怎么调优的? 候选者:哇,这命题很大阿...我认为,对于开发者而言,对MySQL的调优重点一般是在「开发规范」.「数据库索引」又或者说解决线上慢查询上. 候选者:而对于MySQL内部的参数调优,由专业的DBA来搞. 面试官:扯了这么多,你就是想表达你不会MySQL参数调优,对吧 候选者:草,被发现了. 面试官:那你来聊聊你们平时开发的规范和索引这块,平时是怎么样的吧. 候选者:嗯,首先,我们在生产环境下,创建数据库表,都是在工单系统下完成的(那就自然需要DB…
前言 如果面试官问的是,为什么Mysql中Innodb的索引结构采取B+树?这个问题时,给自己留一条后路,不要把B树喷的一文不值.因为网上有些答案是说,B树不适合做文件存储系统的索引结构.如果按照那种答法,自己就给自己挖了一个坑,很难收场.因此,就有了这篇文章的诞生~ 正文 这里的Mysql指的是Innodb的存储引擎下的索引结构,其他存储引擎我们暂时不讨论. B树和B+树 开头,我们先回忆一下,B树和B+树的结构以及特点,如下所示:B树 注意一下B树的两个明显特点 树内的每个节点都存储数据 叶…
面试官:我看你简历上写了MySQL,对MySQL InnoDB引擎的索引了解吗? 候选者:嗯啊,使用索引可以加快查询速度,其实上就是将无序的数据变成有序(有序就能加快检索速度) 候选者:在InnoDB引擎中,索引的底层数据结构是B+树 面试官:那为什么不使用红黑树或者B树呢? 候选者:MySQL的数据是存储在硬盘的,在查询时一般是不能「一次性」把全部数据加载到内存中 候选者:红黑树是「二叉查找树」的变种,一个Node节点只能存储一个Key和一个Value 候选者:B和B+树跟红黑树不一样,它们算…
前言 事务管理,一个被说烂的也被看烂的话题,还是八股文中的基础股之一.但除了八股文中需要熟读并背诵的那些个传播行为之外,背后的"为什么"和核心原理更为重要. ​ 写这篇文章之前,我也翻过一些事务管理器原理介绍文章,但大多都是生硬的翻译源码,一个劲的给源码加注释.这种源码翻译的文章虽说有帮助,但对读者来说体验并不好,很容易陷入代码的一些细节里,并不能帮助读者快速的了解事务管理的全貌,以及设计思路. ​ 本文会从设计角度,一步步的剖析 Spring 事务管理的设计思路(都会设计事务管理器了…
此篇文章算是对mysql事务的一个总结,基本把mysql事务相关的知识点都涵盖到了,面试问来问去无非也就是这些,在了解这些之前我们先对mysql在执行的过程中 有一个整体的认识,如下图 如上图所示,MySQL服务器逻辑架构从上往下可以分为三层: (1)第一层:处理客户端连接.授权认证等. (2)第二层:服务器层,负责查询语句的解析.优化.缓存以及内置函数的实现.存储过程等. (3)第三层:存储引擎,负责MySQL中数据的存储和提取.MySQL中服务器层不管理事务,事务是由存储引擎实现的.MySQ…
在后端面试中,mysql是比不可少的一环,其中对事务和日志的考察更是"重灾区", 大部分同学可能都知道mysql通过redolog.binlog和undolog保证了sql的事务性,也可以用于数据库的数据恢复,但再深入一点,如何保证事务性?更新时数据具体是如何写到磁盘的?这两个日志内容不一致怎么办?写日志也要将日志写到磁盘中,为什么会比直接写数据到磁盘效率更高?..., 这些如果一问三不知,面试官(尤其大厂面试)也差不多让你回去等消息了. redo log与binlog 虽然可能大部分…