
MySQL
i路人甲i
这个作者很懒,什么都没留下…
展开
-
行锁
MySQL 的行锁是在引擎层由各个引擎自己实现的。但并不是所有的引擎都支持行锁。比如 MyISAM 引擎就不支持行锁。InnoDB 是支持行锁的,这也是 MyISAM 被 InnoDB 替代的重要原因之一。两阶段锁在 InnoDB 事务中,行锁是在需要的时候才加上的,但并不是不需要了就立刻释放,而是要等到事务结束时才释放。这个就是两阶段锁协议。如果你的事务中需要锁多个行,要把最可能造成锁冲突、最可能影响并发度的锁的申请时机尽量往后放。死锁和死锁检测当并发系统中不同线程出现循环资源依赖,涉及的线程都在原创 2020-12-29 19:47:30 · 459 阅读 · 0 评论 -
全局锁和表锁
数据库锁设计的初衷是处理并发问题。作为多用户共享的资源,当出现并发访问的时候,数据库需要合理地控制资源的访问规则。而锁就是用来实现这些访问规则的重要数据结构。根据加锁的范围,MySQL 里面的锁大致可以分成全局锁、表级锁和行锁三类。全局锁全局锁就是对整个数据库实例加锁。MySQL 提供了一个加全局读锁的方法,命令是 Flush tables with read lock (FTWRL)。当你需要让整个库处于只读状态的时候,可以使用这个命令,之后其他线程的以下语句会被阻塞:数据更新语句(数据的增删改)、原创 2020-12-29 19:46:40 · 205 阅读 · 0 评论 -
SQL更新流程
前面提到一条查询语句的执行过程一般是经过连接器、分析器、优化器、执行器等功能模块,最后到达存储引擎。那么,一条更新语句的执行流程又是怎样的呢?之前你可能经常听 DBA 同事说,MySQL 可以恢复到半个月内任意一秒的状态,这是怎样做到的呢?我们是从一个表的一条更新语句说起,下面是这个表的创建语句,这个表有一个主键 ID 和一个整型字段 c:mysql> create table test(id int primary key, c int);如果要将id=2这一行的值加1,SQL就会这么写原创 2020-12-20 10:42:13 · 469 阅读 · 1 评论 -
SQL查询流程
查询过程我们平时使用数据库,通常会把它看成一个整体。比如有一个表test,其中有一个字段是id,执行下面这个SQL语句时:select * from test where id = 1;我们只是关注输入一条语句,返回了一个结果,却不知道这条语句在MySQL内部执行的过程。我们现在把MySQL拆解一下,看看里面有哪几部分,这几部分的功能是什么样的。这样我们碰到MySQL的一些异常或者问题时,能够从本质出发,快速定位问题。下面给出MySQL基本架构示意图:大体来说,MySQL分为Server层和原创 2020-12-20 10:40:23 · 729 阅读 · 1 评论 -
“order by”是怎么工作的?
在平常的开发过程中,一定遇到过根据某字段进行排序的需求。以市民表为例,假设你要查询城市是“杭州”的所有人名字,并且按照姓名排序返回前1000个人的姓名、年龄。假设这个表的部分定义是这样的:CREATE TABLE `t` ( `id` int(11) NOT NULL, `city` varchar(16) NOT NULL, `name` varchar(16) NOT NULL, `age` int(11) NOT NULL, `addr` varchar(128) DEFAU原创 2020-12-01 23:31:45 · 130 阅读 · 0 评论 -
MySQL之初识索引(下)
在上一篇文章中,介绍了InnoDB索引的数据结构模型,现在聊聊跟MySQL索引有关的概念。在下面这个表 T 中,如果我执行 select * from T where k between 3 and 5,需要执行几次树的搜索操作,会扫描多少行?下面是这个表的初始化语句。mysql> create table T (ID int primary key,k int NOT NULL DEFAULT 0, s varchar(16) NOT NULL DEFAULT '',index k(k原创 2020-12-01 20:44:03 · 96 阅读 · 0 评论 -
MySQL之初识索引(上)
索引的常见模型一句话简单来说,索引的出现其实就是为了提高数据查询的效率,就像书的目录一样。但是实现索引的方式却有很多种,所以这里也就引入了索引模型的概念。可以用于提高读写效率的数据结构很多,这里我先给你介绍三种常见、也比较简单的数据结构,它们分别是哈希表、有序数组和搜索树。哈希表是一种以键 - 值(key-value)存储数据的结构,我们只要输入待查找的键即key,就可以找到其对应的值即Value。哈希的思路很简单,把值放在数组里,用一个哈希函数把 key 换算成一个确定的位置,然后把value放在数组原创 2020-12-01 19:55:43 · 173 阅读 · 0 评论