MySQL
文章平均质量分 79
一个双子座的Java攻城狮
博客中涉及有Java、Spring、数据库、微服务等,热爱技术,乐于分享,一起成长,遇见未知的自己
展开
-
如何优化 order by 语句
order by 查询语句使用也是非常频繁,有时候数据量大了会发现排序查询很慢,本文就介绍一下 MySQL 是如何进行排序的,以及如何利用其原理来优化 order by 语句。这是一条非常简单且常见的 sql 语句,但是就是这么简单的一条 sql,它到底是如何被执行的呢?原创 2023-01-06 08:30:00 · 729 阅读 · 0 评论 -
一条 update 语句的执行过程
一条更新语句,其实是增,删,查的综合体,查询语句需要经过的流程,更新语句全部需要执行一次,因为更新之前必须要先拿到(查询)需要更新的数据。原创 2023-01-05 08:45:00 · 2409 阅读 · 0 评论 -
一条 select 语句的执行过程
MySQL 从大方向来说,可以分为 Server 层和存储引擎层。而 Server 层包括连接器、查询缓存、解析器、预处理器、优化器、执行器等,最后 Server 层再通过 API 接口形式调用对应的存储引擎层提供的接口来执行增删改查操作。如下即为一个简略的 select 语句查询流程图:根据流程图,可以得出一条 select 查询大致经过以下六个步骤:客户端发起一个请求时,首先会建立一个连接。服务端会检查缓存,如果命中则直接返回,否则继续之后后面步骤。原创 2023-01-05 08:15:00 · 804 阅读 · 0 评论 -
MySQL自增主键用完了怎么办
这个问题其实面试中也是面试官比较喜欢问到的一个问题,而我们大部分人可能数据量根本就达不到用完的这个级别,所以可能很多人没有碰过这个场景,也没有思考过这个问题,在这里我们也还是老规矩,用事实来说话,看看主键用完了到底会发生什么事。到这里,相信大家就对这道面试题就会觉得非常简单了,在 MySQL 中,当主键值用完了之后,主键就不会继续递增了,所以继续插入数据就会报主键冲突从而插入数据失败。不知道大家从这个效果中有没有发现问题?原创 2023-01-04 08:30:00 · 759 阅读 · 0 评论 -
为什么 InnoDB 引擎可以解决幻读问题
行锁是最重要的锁之一, MySQL 中 InnoDB 引擎就是通过行锁来解决的幻读问题。为了验证行锁到底锁住了什么,我们通过几个例子来验证一下。插入测试数据后,我们来看一个例子(操作表 cc1),首先还是打开两个客户端。大家在执行前可以猜测一下,这两条语句是否可以加锁成功?结果是语句 1 会阻塞,也就是加锁不成功,语句 2 会加锁成功。当客户端一执行 commit 之后,客户端二再执行语句 1 就加锁成功了(演示结束后大家记得要把事务 commit,防止数据一直被锁)。原创 2023-01-03 16:42:50 · 490 阅读 · 1 评论 -
MyISAM 引擎和 InnoDB 引擎中索引存储的区别
MyISAM 存储引擎不支持行级锁,只有表级锁;不支持事务,也不支持外键,主要面向 OLAP 应用,是 MySQL 数据库5.5.8 版本之前默认的存储引擎,MyISAM 适用于不需要关心事务,读多写少的场景。每张 MyISAM 表在磁盘上会创建三个文件:.frm,.MYD 和 .MYI,其中 .frm 文件为表结构文件,每个存储引擎都会有这个文件,.MYD 文件用来存储数据,.MYI 文件用来存储索引,也就是说 MyISAM 表的数据和索引是分开存储的,这一点和 InnoDB 不一样。原创 2023-01-03 15:58:23 · 578 阅读 · 0 评论 -
为什么MySQL 要选择 B+树
在关系数据库中,索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结构。再直白点就是我们可以把索引理解成图书或者字典的目录。既然索引是数据的一种存储结构,那么我们必然要对其进行存储,同时,建立索引的目的就是为了加快查询速度,所以必然要选择一种可以高效查询的数据结构来进行存储,而 MySQL 选择了什么数据结构来存储索引呢?原创 2023-01-03 14:59:19 · 371 阅读 · 0 评论 -
如何优化 MySQL
SQL 优化,主要就是在优化索引。有时候数据库会出现性能低、执行时间太长、等待时间太长、SQL 语句欠佳(连接查询)、索引失效等问题,这些问题会严重拖慢一个系统的速度,因此需要对 SQL 进行优化。eq_ref:唯一性索引:对于每个索引键的查询,返回匹配唯一行数据(有且只有 1 个,不能多、不能 0)。虽然没有主动建立索引,但是 mysql 自动建立了主键索引,现在的 type 是 index,继续优化。复合索引:多个列构成的索引,(name,grade)构成索引后先查 name,再查 grade。原创 2023-01-03 11:25:32 · 380 阅读 · 0 评论 -
MySQL事务隔离级别详解
事务(Transaction)是由一系列对数据库中的数据进行访问与更新的操作所组成的一个程序执行单元。在同一个事务中所进行的操作,要么都成功,要么就都失败。理想中的事务必须满足四大特性,这就是大名鼎鼎的 ACID 特性。虽然说 ACID 是事务的四大特性,然而并不是所有的事务都满足 ACID 全部特性,比如:对于 Oracle 和 SQL Server 数据库,其默认隔离级别是 Read COMMITTED,就并不是那么严格的满足 I(隔离性)的要求;原创 2023-01-03 10:37:39 · 920 阅读 · 1 评论 -
MySQL的锁
把那些可能会被多个线程同时操作的资源称为临界资源,加锁的目的就是让这些临界资源在同一时刻只能有一个线程可以访问。数据库作为用户共享的一个资源,如何保证数据并发访问一致性也是所有数据库必须解决的问题,如何加锁是数据库并发访问性能的一个重要因素。这种操作开销小,加锁快,不会出现死锁,但是锁的粒度大,并发度低。行锁就是锁住一行数据,这种做法开销大,加锁慢,会出现死锁。注意:InnoDB 的行锁是加在索引上的,如果索引失效或者修改的是非索引字段,行锁就会升级为表锁。:当前写操作没有完成前,会排斥其他的读锁和写锁。原创 2023-01-03 08:15:00 · 232 阅读 · 0 评论 -
数据库的三大范式
同一个订单会有多个商品,所以主键是订单 id 和商品 id,但是商品名称仅依赖于商品 id,不满足表中的每一列都要和主键有关,而不能只与主键的某一部分相关,因此只是第一范式。在上面的例子中,订单表中的用户 id 依赖于订单 id,但是用户地址和用户电话依赖于用户 id,形成了传递函数依赖,不满足第三范式。设计关系数据库时,需要遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,越高的范式数据冗余度越低。第二范式在第一范式的基础上,消除了非主属性对主属性的部分函数依赖。原创 2023-01-03 08:00:00 · 231 阅读 · 0 评论 -
MySQL中常见的约束
建表后单独添加非空约束。原创 2023-01-01 20:43:42 · 489 阅读 · 0 评论 -
MySQL中的视图
视图是一种虚拟存在的数据表这个虚拟的表并不在数据库中实际存在说白了,视图就是将一条SELECT查询语句的结果封装到了一个虚拟表中,所以我们在创建视图的时候,工作重心就要放在这条SELECT查询语句上视图的好处简单安全数据独立。原创 2023-01-01 20:37:12 · 526 阅读 · 0 评论 -
MySQL中的DDL、DML、DCL、DQL
SQL分类原创 2023-01-01 17:38:48 · 1939 阅读 · 0 评论 -
MySQL简介及常用引擎介绍
在这个版本中,MySQL 有比较大的改进就是采用 MyISAM 引擎替换了老旧而且有诸多限制的 ISAM 引擎,而且同时也可以支持 InnoDB 引擎,不过此时的InnoDB 并不在 MySQL 默认的二进制发行版本中,如果想要 InnoDB 引擎,需要手动编译。需要说明的是,既然 MySQL 中支持这么多存储引擎,所以其自然是有定义规范的,也就是说,只要满足一定规范,而团队实力又强的话,我们也可以考虑开发自己的存储引擎,开发自己的存储引擎需要使用 C 语言进行编写,规范可以参考。原创 2022-12-30 16:30:41 · 1037 阅读 · 0 评论