MySQL系列--08再谈锁规则
这段时间工作有点忙没有继续更新,MySQL锁重新梳理了一下,前面的文章中整理了几种锁的概念,但是没有整理加锁的规则,尤其是间隙锁和Next-Key Lock,容易在判断锁等待的问题上犯错。所以这篇找来了几个案例,从案例分析加锁规则。在进入案例之前,先看下前提条件说明已经加锁规则的总结。
前提MySQ ...
笔记--注解ControllerAdvice的使用
最近改造一个项目,将SpringMVC升级为SpringBoot,发现这个项目没有做全局异常处理(实际上我手里接过来的好多项目都没做),于是想给加一个全局异常处理的逻辑。通常的做法我比较熟悉的立马能想到的就是利用Spring的异常处理接口HandlerExceptionResolver自定义自己的异 ...
MySQL系列--07Explain详解
前面的整理中已经涉及到了EXPLAIN命令,EXPLAIN命令是MySQL查询性能优化不可缺少的一部分。这篇就主要整理了EXPLAIN命令的使用和参数说明,更深入地去了解一下这个常用工具,以便更好得优化SQL性能!同时后面也整理了几个典型的SQL优化案例。
EXPLAIN全貌当我需要优化一条SQL语 ...
MySQL系列--06MySQL会选错索引?
虽然前面已经详细整理了索引以及其相关的概念,但是索引对于我们来说,实在太常用到,而且时常会碰到SQL调优的场景。我们已经知道,MySQL里面一张表可以有多个索引,但是索引的选择却通常不是我们主动指定的,也就是说,具体使用不使用,使用哪个索引,由MySQL决定。当我知道MySQL有时也会选错索引导致执 ...
MySQL系列--05索引详解
前言整理过了MySQL架构、日志系统、事务和锁机制,本篇的主角就是面试必问的索引了。索引的出现其实就是为了提高数据查询的效率,就像书的目录一样。在数据十分庞大的时候,索引可以大大加快查询的速度。这是因为使用索引后可以不用扫描全表来定位某行的数据,而是先通过索引表找到该行数据或对应的物理地址然后访问相 ...
MySQL系列--04锁机制详解
简介数据库锁设计的初衷是处理并发问题。当出现并发访问的时候,数据库需要合理地控制资源的访问规则。而锁就是用来实现这些访问规则的重要数据结构。根据加锁的范围,MySQL里面的锁大致可以分成全局锁、表级锁、页级锁和行锁四类。这些锁都属于悲观锁。
MySQL还有一个显著的特点就是不同的存储引擎支持不同的锁 ...
MySQL系列--03事务及隔离级别
事务简介简单来说,事务就是要保证一组数据库操作,要么全部成功,要么全部失败。在MySQL中,事务支持是在引擎层实现的。你现在知道,MySQL是一个支持多引擎的系统,但并不是所有的引擎都支持事务。比如MySQL原生的MyISAM引擎就不支持事务,这也是MyISAM被InnoDB取代的重要原因之一。
那 ...
你真的理解了hashCode与equals了吗
前言前天听隔壁的同事电话面试,问别人hashCode与equals相关的问题,我自己也想了一下,虽然能想出来,但是好像还是感觉缺点什么东西,于是乎,也查找了相关资料,觉得有必要整理一下,做个记录。
在研究这个问题之前,先说明一下JDK对equals和hashCode这两个方法的定义和规范:在Java ...
MySQL系列--02更新语句的执行
楔子我们了解了MySQL架构和一条查询SQL的执行流程,并介绍了执行过程中设计的各个组件模块;一条查询的SQL语句执行过程一般是经过连接器、分析器、优化器、执行器等组件模块,这些都是在Server层,最后达到存储引擎层。那么,一条更新SQL语句的执行流程又是怎么样的呢?
先从一张简单的表说起,假设现 ...
MySQL系列--01查询语句的执行
前言突然觉得琐碎的知识不容易形成知识网络,我会在Chronos整理一些觉得值得记下的东西,最近希望整理几个专栏,更加系统地记录下来。前面已经整理了几篇JVM相关的知识,我会继续学习与整理,这里我又想到了MySQL可以整理出一个系列,后面还会有其他的系列。
回到MySQL,这里是MySQL的第一篇,所 ...