MySQL
MySQL相关知识
程序员面试那点事儿
互联网大厂校招、社招面试官,多年互联网大厂工作经验,分享校招、社招面试题、职场相关内容,互相交流经验
展开
-
MySQL学习导航
insert语句为什么锁这么多原创 2021-01-06 21:50:17 · 93 阅读 · 0 评论 -
insert语句为什么锁这么多
insert语句为什么锁这么多原创 2020-11-19 08:41:38 · 154 阅读 · 0 评论 -
MySQL的Join查询详解
CREATE TABLE `t1` ( `id` int(11) NOT NULL, `a` int(11) DEFAULT NULL, `b` int(11) DEFAULT NULL, PRIMARY KEY (`id`), KEY `a` (`a`) ) ENGINE=InnoDB;t1里插入100条数据CREATE TABLE `t2` ( `id` int(11) NOT NULL, `a` int(11) DEFAULT NULL, `b` int(11) DEF原创 2020-11-12 10:03:33 · 268 阅读 · 0 评论 -
MySQL单表访问方式及索引使用相关问题
访问方法使用全表扫描进行查询使用索引进行查询等值查询范围查询扫描整个索引访问方法类型const通过主键或者唯一二级索引列与常数的等值比较来定位一条记录非常快,是常数级别的,所以访问方法定义为:constref通过普通的二级索引列与常数进行等值比较的访问方法为ref...原创 2020-11-10 22:56:41 · 124 阅读 · 0 评论 -
可重复读隔离级别下的加锁分析
使用主键进行等值查询值存在 单个记录锁值不存在 gap锁使用主键进行范围查询SELECT * FROM hero WHERE number >= 8 LOCK IN SHARE MODE;为值为8的聚簇索引加记录锁为大于8的聚簇所以记录加next-key锁SELECT * FROM hero WHERE number <= 8 LOCK IN SHARE MODE;对小于15的值都会加上next-key锁,并且不会释放15的锁使用唯一二级索引进行等值查询值原创 2020-10-30 11:27:25 · 786 阅读 · 0 评论 -
MySQL幻读问题
首先建立一张表,便于分析。CREATE TABLE `t` ( `id` int(11) NOT NULL, `c` int(11) DEFAULT NULL, `d` int(11) DEFAULT NULL, PRIMARY KEY (`id`), KEY `c` (`c`)) ENGINE=InnoDB;insert into t values(0,0,0),(5,5,5),(10,10,10),(15,15,15),(20,20,20),(25,25,25);执行以下S原创 2020-10-30 09:43:37 · 89 阅读 · 0 评论 -
MySQL的数据目录
InnoDB、MyISAM这样的存储引擎都是把表存储在文件系统上的,读取数据的时候,存储引擎从文件系统拿数据,写入数据的时候,存储引擎向文件系统写数据。数据目录通过SHOW VARIABLES LIKE ‘datadir’ 可以查看MySQL的数据目录,数据目录用于存储MySQL运行过程中产生的数据。目录的结构数据库在文件系统中的表示在数据目录下创建一个和数据库名同名的子目录(或者说是文件夹)在该与数据库名同名的子目录下创建一个名为db.opt的文件,这个文件中包含了该数据库的各种属性,比方说原创 2020-10-21 23:42:05 · 182 阅读 · 0 评论 -
B+树索引
文章目录没有索引的查找索引InnoDB中的索引方案聚簇索引二级索引联合索引InnoDB的B+树索引的注意事项B+树的形成过程内节点中目录项记录的唯一性一个页面最少存储2条记录MyISAM中的索引方案简单介绍InnoDB各个数据页可以组成一个双向链表,每个数据页内部的记录会按主键值从小到大组成一个单链表,每个数据页都会为存储在其中的记录生成一个页目录,通过主键查找的时候,可以通过页目录进行二分查找。没有索引的查找首先分析下在一个页中的查找以主键为搜索条件:通过页目录进行二分查找以其他列为搜索条件原创 2020-10-09 17:33:15 · 253 阅读 · 0 评论 -
MySQL日志之binlog、redo log、undo log详解
binlogbinlog是Mysql sever层维护的一种二进制日志三种格式binlog的格式也有三种:STATEMENT、ROW、MIXED 。STATEMENT:每一条会修改数据的SQL语句会记录到binlog中优点:不需要记录每行的数据变化,这样子binlog日志比较少,减少磁盘IO,提高性能缺点:某些特定函数的执行无法被复制,UUID()、USER()ROW:不记录上下文信息,只记录那条数据修改成了什么样子。优点:缺点:一条update语句,修改多条记录,产生多条日志。alte原创 2020-09-28 14:57:51 · 323 阅读 · 0 评论 -
MySQL锁问题
锁机制出现的背景最大限度的利用数据库的并发访问每个用户以一致的方式读取和修改数据什么是锁用于管理对共享资源的并发访问,从而保证数据的完整性和一致性InnoDB存储引擎中的锁共享锁:允许读一行数据排他锁:允许更新或者删除一行数据只有同时是共享锁的时候兼容,其他组合均互斥。InnoDB 支持多粒度的锁,这种锁允许事务在行级锁和表级锁同时存在。为支持在不同粒度上进行加锁操作,InnoDB存储引擎支持一种额外的锁方式,称之为意向锁(Intention Lock)意向共享锁(IS Lo原创 2020-09-14 19:19:10 · 165 阅读 · 0 评论 -
MySQL全局锁、表锁、行锁
数据库锁设计的初衷就是处理并发问题,合理的控制资源的访问规则。根据加锁的范围,可以分为全局锁、表锁、行锁。全局锁对整个数据库实例加锁。MySQL可以通过Flush tables with read lock 来实现全局读锁,之后更新类的语句都会被阻塞。通过加全局读锁的备份方式,在主库,会引发业务停摆,在从库,会引发主从不一致。使用场景:不支持可重复读这个隔离级别的引擎全库的逻辑备份。当引擎支持可重复读的时候,可以用mysqldump -single-transaction,导数据的时候启动一原创 2020-08-27 10:59:16 · 244 阅读 · 0 评论 -
InnoDB数据页结构
页是InnoDB管理存储空间的基本单位,一个页的大小一般是16KB数据页结构名称中文名占用空间大小简单描述File Header文件头部38字节页的一些通用信息Page Header页面头部56字节数据页专有的一些信息Infimum + Supremum最小记录和最大记录26字节两个虚拟的行记录User Records用户记录不确定实际存储的行记录内容Free Space空闲空间不确定页中尚未使用的空间Page Dir原创 2020-08-24 17:34:18 · 342 阅读 · 0 评论 -
innoDB记录结构
简介InnoDB是将表数据存储在了磁盘上,真正进行处理数据的时候,还是需要将数据从磁盘读入内存中,磁盘和内存的交互单位是页,InnoDB中页的大小一般为16KB。行格式向表中插入数据是以记录为单位的,这些记录在磁盘上的存储方式被称为行格式或者记录格式。行格式都有哪些Compact、Redundant、Dynamic、Compressed如何指定具体的行格式CREATE TABLE 表名 ROW_FORMAT= 行格式ALTER TABLE 表名 ROW_FORMAT= 行格式COMPAC原创 2020-08-24 11:12:04 · 223 阅读 · 0 评论 -
MySQL基本架构详解之连接器、查询缓存、分析器、优化器、执行器
文章目录连接器查询缓存分析器优化器执行器MySQL 可以分为 Server 层和存储引擎层两部分。Server 层:所有跨存储引擎的功能都在这一层实现存储引擎层:负责数据的存储和提取连接器负责跟客户端建立连接、获取权限、维持和管理连接。MySQL使用长连接某些情况下会造成MySQL 占用内存涨得特别快,因为 MySQL 在执行过程中临时使用的内存是管理在连接对象里面的。代码层判断执行过一个大查询后,断开重新连接5.7版本之后,mysql_reset_connection 来重新初始化连接原创 2020-08-21 20:27:37 · 2648 阅读 · 2 评论 -
MySQL事务隔离级别详解及MVCC实现原理
事务是什么事务的隔离级别事务隔离级别的实现MVCC原理更新时的事务逻辑原创 2020-08-20 17:52:06 · 1403 阅读 · 1 评论 -
怎么给字符串字段加索引?
1 使用前缀索引的时候,需要定义好长度,能节省空间,又能减少查询成本 mysql> select count(distinct left(email,4))as L4, count(distinct left(email,5))as L5, count(distinct left(email,6))as L6, count(distinct left(email,...原创 2019-03-18 20:02:42 · 1067 阅读 · 0 评论 -
自增ID用完怎么办
自增ID因为存在类型而存在上限 一 表定义自增ID值 达到上限后,再申请一个ID时,值保持不变,最后报主键冲突 create table t(id int unsigned auto_increment primary key) auto_increment=4294967295;insert into t value...原创 2019-03-07 10:42:54 · 3419 阅读 · 0 评论 -
MySQL的四种事务隔离级别
本文实验的测试环境:Windows 10+cmd+MySQL5.6.36+InnoDB一、事务的基本要素(ACID) 1、原子性(Atomicity):事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间环节。事务执行过程中出错,会回滚到事务开始前的状态,所有的操作就像没有发生一样。也就是说事务是一个不可分割的整体,就像化学中学过的原子,是物质构成的基本单位。 2、一致性(Con...转载 2018-04-04 21:11:47 · 335 阅读 · 0 评论 -
Mysql 水平分表、垂直分表、水平分库、垂直分库
水平分表:把一个表拆分按某个字段拆分称多个表 (用户表)垂直分表:把表的大字段,并且不是经常查询,单独的放入到一张表去(文章表)水平分库方式主要根据用户属性(如地市)拆分物理数据库。(一种常见的方式是将全省划分为几个大区)垂直分库方式:根据业务维度和数据的访问量等,进行数据的分离,剥离为多个数据库。(收藏夹和博客的库分开)...原创 2018-03-09 16:45:42 · 7774 阅读 · 0 评论 -
Order by Having和笛卡尔积不明白知识点
原创 2018-05-21 08:48:40 · 234 阅读 · 0 评论 -
mysql高可用架构设计
主要介绍:复制功能介绍,mysql二进制日志,mysql复制拓扑,高可用框架,单点故障,读写分离和负载均衡一 mysql复制功能介绍 mysql复制功能提供分担读负载二 复制解决的问题 1 实现不同服务器上的数据分布 1.1 利用二进制增量进行 1.2 不需要太多的带宽 1.3 但是使用基于行的复制在进行大批量修改时会对带宽带来一定...原创 2018-03-07 08:04:55 · 5270 阅读 · 0 评论 -
DB主从半同步复制
主从不一致的原因是延时引起的,所以要消除这个延时的影响,可以从主库进行CUD操作时进行规避,办法就是等主从同步完成之后,主库上的写请求再返回,就是大家常说的“半同步复制”方案优点:利用数据库原生功能,比较简单 方案缺点:主库的写请求时延会增长,吞吐量会降低...原创 2019-03-12 17:37:53 · 225 阅读 · 0 评论 -
什么影响了mysql性能
介绍服务器硬件、服务器系统、数据库存储引擎、数据库参数配置、数据库结构设计和mysql语句对数据库的影响 一 影响性能的几个方面 服务器硬件 服务器系统 数据库存储引擎(插件式存储引擎) MyISAM:不支持事务,表级锁 InnoDB:事务级存储引擎,...原创 2018-03-09 08:09:33 · 206 阅读 · 0 评论 -
mysql基准测试
主要简单了解mysql的基准测试 什么是基准测试 基准测试是一种测量和评估软件性能指标的活动,用于建立某个时刻的性能基准,以便当系统发生软硬件变化时重新进行基准测试以评估变化对性能的影响,通俗讲就是针对系统设置的一种压力测试 基准测试于压力测试的区别 基准测试:直接、简单、易于比较、用于评估服务器的处理能...原创 2018-03-09 06:43:03 · 223 阅读 · 0 评论 -
数据库分库分表
简单了解数据库分库分表,以及数据库的分片 什么是分库分表 原本存储于一个库的数据分块存储到多个库上,把原本存储于一个表的数据分块存储在到多个表上 为什么分库分表 当一张表的数据达到几千万时,你查询一次所花的时间会变多,如果有联合查询的花,我想啃根会死在那。分表的目的就在于此,减少数据库的负担,缩短查询时间。 ...原创 2018-03-09 06:24:27 · 428 阅读 · 0 评论 -
Mysql查询优化
主要介绍慢查询日志、sql的解析预处理及生成执行计划、查询各个阶段所消耗的时间等一 如何获取有性能问题的SQL 通过用户反馈获取存储性能的sql 通过慢查询日志获取存储性能问题的sql 实时获取存在性能问题的sql二 慢查询日志介绍 使用慢查询日志获取有性能的sql show_query_log 启动停止记录慢查日志 show_query...原创 2018-03-08 12:40:11 · 587 阅读 · 0 评论 -
Mysql表级锁的锁模式、并发插入
mysql表级锁的锁模式 两种表级锁模式:表共享读锁和表独占写锁 1 对MyISAM表的读操作(加读锁),不阻塞其他进程对同一表的读请求,但会阻塞对同一表的写请求。 2 对MyISAM表的写操作(加写锁),会阻塞其他进程对同一表的读和写操作。并发插入 原则傻姑娘数据表有一个读锁时,其他进程无法对表进行更新操作,但是MyISAM表支持查询和插入的并发进行 ...原创 2018-03-09 17:22:40 · 1307 阅读 · 0 评论 -
MySQL主从复制与主主复制
回到顶部1、简介 MySQL作为世界上使用最为广泛的数据库之一,免费是其原因之一。但不可忽略的是它本身的功能的确很强大。随着技术的发展,在实际的生产环境中,由单台MySQL数据库服务器不能满足实际的需求。此时数据库集群就很好的解决了这个问题了。采用MySQL分布式集群,能够搭建一个高并发、负载均衡的集群服务器(这篇博客暂时不涉及)。在此之前我们必须要保证每台MySQL服务器里的数据同步。...转载 2018-03-12 17:43:45 · 107 阅读 · 0 评论 -
进程和线程
,两个线程,一个线程向队列中放数据,另外一个从队列中取数据,处理起两个线程的协作就显得很麻烦,不但需要加锁,还得做好线程的通知和等待。linux下分为用户空间和内核空间?什么是进程间通信 在用户空间实现进程通信是不可能的,的Linux内核通信(两个房子,没有窗户,无法通信)什么是线程间通信在用户空间就可以实现,可以通过全局变量通信有哪几种通信方式 1管道通信:无名,有名 2信号通信:信...原创 2018-07-10 15:36:04 · 163 阅读 · 0 评论 -
MYSQL中replace into的用法
新建一个test表,三个字段,id,title,uid, id是自增的主键,uid是唯一索引;插入两条数据insert into test(title,uid) VALUES ('123465','1001');insert into test(title,uid) VALUES ('123465','1002');执行单条插入数据可以看到,执行结果如下:[SQL]insert into ...转载 2018-05-30 21:55:10 · 269 阅读 · 0 评论 -
Mysql中字段类型不一致导致索引无效的处理办法
前两天有个同事算数据,写出来的sql执行很慢。那个sql也很简单,就是一个左联带条件的查询。explain之后发现,其中有一张表没有用到索引。初始以为是没有建索引,于是建上索引再试,发现问题依旧。后来查看表结构才发现,原来用来做关联的字段是一个varchar类型的字段,而联接的另一张表中的字段类型却是bigint,结果造成了类型的不匹配,以致于索引失效。如果要想索引起效,最直接的办法就是将两张表的...转载 2018-05-30 11:06:28 · 6072 阅读 · 1 评论 -
mysql索引原理之聚簇索引
索引分为聚簇索引和非聚簇索引。以一本英文课本为例,要找第8课,直接翻书,若先翻到第5课,则往后翻,再翻到第10课,则又往前翻。这本书本身就是一个索引,即“聚簇索引”。如果要找"fire”这个单词,会翻到书后面的附录,这个附录是按字母排序的,找到F字母那一块,再找到"fire”,对应的会是它在第几课。这个附录,为“非聚簇索引”。由此可见,聚簇索引,索引的顺序就是数据存放的顺序,所以,很容易理解,一张...转载 2018-04-05 07:27:09 · 681 阅读 · 0 评论 -
数据库索引优化
本文主要介绍索引的两种存储结构(B-tree索引和Hash索引),以及索引的优化策略 一 B-tree索引 1 B-tree索引的特点 1.1 B-tree索引以B+树的结构存储数据 1.2 B-tree索引能加快数据的查询速度 1.3 b-tr...原创 2018-03-06 07:37:23 · 274 阅读 · 0 评论 -
第5章 PHP与数据库基础
数据库是Web应用的重点,往往是一个系统的瓶颈所在 5.1 什么是PDO PHP对数据库支撑不好,最重要一点就是抽象度不够,访问接口不统一。每种数据库都有一个模块,无法进行迁移,通常通过编写多个类,用适配器模式实现。 PDO提供一个通用接口访问多种数据库,为PHP定义了一个访问数据库的轻量级、持久的接口。 注:利用PDO扩展本身并不能实现任何...原创 2018-03-13 07:45:25 · 178 阅读 · 0 评论 -
PHP+Mysql实现读写分离
<?phpclass Db{ private $res; function __construct($sql) { $querystr = strtolower(trim(substr($sql,0,6))); //如果是select,就连接slave服务器 if($querystr == 'select') { $res=$this->slav...转载 2018-03-12 17:54:38 · 1046 阅读 · 0 评论