MySQL
文章平均质量分 84
MySQL相关知识
vk-fengz
学习笔记 记录,可能有些不全面,见谅
展开
-
【MySQL源码】yacc & Lex
目录1. YACC1.1. YACC概述–bison1.2. 语法规则1.2.1. 结构1.2.2. %union1.2.3. %type 声明1.2.4. 记号1.2.5. %code 块1.2.6. yy宏1.3. rules 规则1.3.1. 优先级与结合性1.3.2. 左递归与右递归1.3.3. 继承属性($0)1.4. 二义性和冲突1.4.1. 二义性1.4.2. 冲突1.4.2.1. shift/reduce 移进/归约1.4.2.2.原创 2021-07-22 15:48:28 · 483 阅读 · 0 评论 -
【MySQL语法】序列 AUTO_INCREMENT和Sequence
目录1. 构建序列2. AUTO_INCREMENT3. MySQL实现Sequence3.1. 实现3.2. 问题解决1. 构建序列一般使用序列(Sequence)来处理主键字段,在MySQL中是没有序列的,但是MySQL有提供了自增长(increment)来实现类似的目的,但也只是自增,而不能设置开始索引、是否循环等;最重要的是一张表只能由一个字段使用自增,但有的时候我们需要两个或两个以上的字段实现自增(单表多字段自增),MySQL本身是实现不了的,但我们可以用创建一个序原创 2021-07-22 15:45:59 · 767 阅读 · 0 评论 -
【MySQL语法】游标
目录1. MySQL 游标1.1. 概述1.2. 操作1.2.1. 基本语法、1.2.2. 示例1. MySQL 游标1.1. 概述概述:当需要在 检索出来的行中前进或后退 一行或多行;是被语句 检索出来的结果集;游标(cursor) 是存储在服务器上的 数据库查询;只用于 存储过程(和函数);优点针对 行 进行操作;对查询到的结果集的每一行,进行独立的 相同或是 不同的操作,是一种分离的思想;游标的缺点性能不高只能一行一行操作原创 2021-07-22 15:41:46 · 370 阅读 · 0 评论 -
【MySQL】并发02 锁 MVCC
目录1. MVCC1.1. 概述1.2. 优缺点2. 乐观锁 & 悲观锁2.1. 乐观锁2.2. 悲观锁1. MVCC1.1. 概述MVCC使得大部分支持行锁的事务引擎,不再单纯的使用行锁来进行数据库的并发控制,取而代之的是把数据库的行锁与行的多个版本结合起来,只需要很小的开销,就可以实现非锁定读,从而大大提高数据库系统的并发性能。1.2. 优缺点MVCC在大多数情况下代替了行锁,实现了对读的非阻塞,读不加锁,读写不冲突。缺点是每行记录都需要额外的原创 2021-07-22 15:28:19 · 59 阅读 · 0 评论 -
【MySQL】并发01 锁 阻塞 事务 隔离级别
目录1. 事务1.1. 概述1.2. 事务与死锁1.3. ACID特性2. 锁2.1. 概述2.2. 分类2.2.1. 排他锁2.2.2. 共享锁2.2.3. 死锁3. 阻塞4. 事务隔离级别4.1. 写4.2. 读4.2.1. 未提交读(READ UNCOMMITTED)4.2.2. 已提交读 (READ COMMITTED)4.2.3. 可重复读 (REPEATABLE READ)4.2.4. 可序列化(SERIALIZABLE)原创 2021-07-22 15:27:05 · 137 阅读 · 0 评论 -
【MySQL优化】01 概述及索引
目录1. 基本概念1.1. 参考资料1.2. 总体优化建议1.3. hint相关2. 索引优化2.1. 基本概念2.2. 索引优化2.3. 虚拟列3. 其他3.1. 外键与级联3.2. 通配符1. 基本概念1.1. 参考资料参考:MySQL高性能优化规范建议 --JavaGuideSQL优化30条sql语句优化的30种方法1.2. 总体优化建议MySQL 高级1.3. hint相关mysql常用的hint(原创)2. 索原创 2021-07-22 15:20:14 · 69 阅读 · 0 评论 -
【MySQL源码】01 MySQL源码总述
目录1. 版本关系2. MySQL MariaDB 安装2.1. MariaDB安装2.1.1. 源码编译安装2.2. docker运行2.3. 安装MySQL3. 文件目录 & 类 概述3.1. 文件3.1.1. 头文件3.2. 类4. MySQL语句解析器 – lex + yacc4.1. 概述4.2. Lex 词法解析器4.3. yacc 语法解析器5. MySQL语句 成员分析5.1. 语句解析过程5.2. select原创 2021-06-15 21:12:16 · 1598 阅读 · 0 评论 -
MySQL 库、表 操作
2. 数据库 基本操作一千行MySQL学习笔记 # 参数介绍菜鸟教程书籍:MySQL 必知必会2.1. 数据库操作/* 数据库操作 */ -------------------- 查看当前数据库 -- 3种方法; SELECT DATABASE(); --() 括号内空; show tables; status;-- 显示当前时间、用户名、数据库版本 SELECT now(), user(), version();-- 创建库 C原创 2020-05-12 20:20:05 · 952 阅读 · 0 评论 -
转载:从Mysql源代码角度分析一句简单sql的查询过程
1. 前言使用mysql这么多年,以前一直只懂写sql,却不其中运行原理,直至最近抽时间看了一下mysql源代码,对其事务...转载 2020-08-10 21:13:56 · 184 阅读 · 0 评论 -
【MySQL】01 版本更新及小功能汇总
目录1. 显示1.1. parge1.2. \G1.3. 清空屏幕2. 状态查看2.1. processlist1. 显示处理屏幕显示的效果, 结果等;1.1. parge概述在mysql日常操作中,妙用pager设置显示方式,可以大大提高工作效率。比如select出来的结果集超过几个屏幕,那么前面的结果一晃而过无法看到,这时候使用pager可以设置调用os的more或者less等显示查询结果,和在os中使用more或者less查看大文件的效果一样。pag原创 2020-12-03 21:06:19 · 90 阅读 · 0 评论 -
【MySQL源码】元数据
目录1. frm文件2. ibd文件1. frm文件文件:table1.frm table1.MYD table1.MYI.MYD (data) and .MYI (index)查看frm文件hexdump -v -C table1.frmCREATE VIEW 也会生成 *.frm 文件, 与表的frm文件不同, view的frm文件是纯文本;参考:【MySQL】frm文件解析官方文档: 11.1 MySQL .frm File Format2.原创 2021-06-15 21:14:25 · 94 阅读 · 0 评论 -
转载:Sql语句的执行原理-MySQL
第一步:应用程序把查询SQL语句发送给服务器端执行。我们在数据库层执行SQL语句时,应用程序会连接到相应的数据库服务器,把SQL语句发送给服务器处理。第二步:查询缓存服务器在解析一个查询语句之前,如果查询缓存是打开的(MySQL默认打开,可以使用have_query_cache查看),在接收到查询请求后,并不会直接去数据库查询,而是在数据库的查询缓存中找是否有相对应的查询数据(某条给定的查询语句在第一次执行时,服...转载 2020-07-01 10:16:08 · 179 阅读 · 0 评论 -
【MySQL】增删改查
目录1. 简单 增删改查2. 增2.1. replace into1. 简单 增删改查命令实例/* 数据操作 */ -------------------- 增 INSERT [INTO] 表名 [(字段列表)] VALUES (值列表)[, (值列表), ...] -- 如果要插入的值列表包含所有字段并且顺序一致,则可以省略字段列表。 -- 可同时插入多条数据记录! REPLACE 与 INSERT 完全一样,可互换。原创 2020-10-09 21:53:43 · 51 阅读 · 0 评论 -
【MySQL进阶】MySQL架构 索引深度解析
目录1. mysql深度解析1.1. mysql架构解析1.2. mysql存储引擎2. 索引2.1. MySQL索引系统2.1.1. 问题2.1.2. InnoDB的索引2.2. 索引分类2.2.1. 分类2.2.2. 索引解析2.2.3. 索引失效3. 日志系统1. mysql深度解析参考:MySQL深度解析:mysq|架构体系、mysql调优、mysql索引、索引优化、存储引擎、B+树1.1. mysql架构解析MySQL架构原创 2021-06-03 00:12:14 · 254 阅读 · 1 评论 -
【MySQL语法】01 基础语法合集
目录1. MySQL 起步准备1.1. 连接服务器1.2. 其他1.2.1. 注释2. 数据库 基本操作2.1. 数据库操作2.2. 表 操作2.3. 数据操作 – 行、字段3. 表 结构3.1. 建表规范3.2. 列属性(列约束)3.3. TRUNCATE3.4. 索引4. 数据类型4.1. 数据类型(列类型)4.2. 字符集编码5. SQL 语句5.1. SELECT 语句5.2. UNION – 组合查询5.3. 子查询5.原创 2020-05-18 19:33:09 · 854 阅读 · 0 评论 -
【MySQL语法】explain语句
目录1. explain语句1.1. 概述1.2. 详解1. explain语句1.1. 概述作用explain模拟优化器执行SQL语句,可以使用explain查看执行计划,从而知道mysql是如何处理sql语句,分析查询语句或者表结构的性能瓶颈。可以得到:表的读取顺序数据读取操作的操作类型哪些索引可以使用哪些索引被实际使用表之间的引用每张表有多少行被优化器查询1.2. 详解查询类型及字段详解注:具体查看参考资料;extend原创 2020-10-10 10:21:38 · 125 阅读 · 0 评论 -
【MySQL】查看库表信息
目录1. 数据库1.1. MySQL自带数据库1.1.1. information_schema1.2. 自建数据库2. 表的数据统计2.1. 查看 列1. 数据库1.1. MySQL自带数据库概述information_schema 数据库跟 performance_schema 一样,都是 MySQL 自带的信息数据库。其中 performance_schema 用于性能分析,而 information_schema 用于存储数据库元数据(关于数据的原创 2020-12-01 10:16:32 · 1227 阅读 · 0 评论 -
【MySQL语法】索引及约束
目录1. 索引类型1.1. 概述1.2. 普通索引1.3. 唯一索引1.4. 主键索引1.5. 组合索引1.6. 全文索引1. 索引类型MySQL数据库的索引类型1.1. 概述普通索引唯一索引主键索引组合索引全文索引参考:mysql数据库的索引类型1.2. 普通索引概述最基本的索引,它没有任何限制,用于加速查询。创建方法:a. 建表的时候一起创建CREATE TABLE mytable ( name VARCHAR(32) , IN原创 2020-08-20 21:11:58 · 231 阅读 · 1 评论 -
【MySQL语法】子查询
2. 子查询2.1. 概述子查询的种类概述where型子查询:指把 内部查询的结果作为外层查询的比较条件。from型子查询:把内层的查询结果当成临时表,供外层sql再次查询。in子查询:内层查询语句仅返回一个数据列,这个数据列的值将供外层查询语句进行比较。exists子查询:把外层的查询结果,拿到内层,看内层是否成立,简单来说后面的返回true,外层(也就是前面的语句)才会执行,否则不执行。any子查询:只要满足内层子查询中的任意一个比较条件,就返回一个结果作为外层查询条件。all子查原创 2020-08-10 18:53:43 · 431 阅读 · 0 评论 -
【MySQL进阶】02 触发器 视图
目录1. 触发器1.1. 触发器概述1.2. 触发器使用2. 视图2.1. 概述2.2. 视图使用用途:针对复杂查询进一步优化;1. 触发器1.1. 触发器概述参考:Mysql - 触发器/视图1.2. 触发器使用基本语法/* 触发器 */ ------------------ 触发程序是与表有关的命名数据库对象,当该表出现特定事件时,将激活该对象 监听:记录的增加、修改、删除。-- 创建触发器 CREATE TRI原创 2021-05-11 15:42:04 · 251 阅读 · 0 评论 -
【MySQL架构】01 SQL语句执行过程
目录1. MySQL & SQL语句执行过程1.1. 参考资料1.2. SQL语句 & code解析过程:1.2.1. 总体执行流程1.2.2. 查询执行流程1.3. 执行 – 逻辑执行计划1.3.1. 解析与执行 顺序1.3.2. MySQL解析器 – lex + yacc1.4. 执行 – 物理实现过程2. 执行计划 终止原因2.1. 查询结果/语句不会被缓存的情况3. 补充知识1. MySQL & SQL语句执行过程原创 2020-08-10 11:01:55 · 242 阅读 · 0 评论 -
【MySQL语法】一些函数功能
目录1. 字符串1.1. mysql 截取字符串: left() ,right() 和IFNULL()用法1.2. CAST 与 CONVERT 函数2. 排序2.1. field()1. 字符串1.1. mysql 截取字符串: left() ,right() 和IFNULL()用法left() : 从字符串左边开始提取;right() : 从字符串右边开始提取;ifnull(expr1, expr2) :若expr1 不为NULL,则返回 expr原创 2020-10-20 10:32:30 · 62 阅读 · 0 评论 -
【MySQL进阶】01 函数 存储过程
目录1. 函数1.1. 查看方法1.2. 函数定义2. 存储过程2.1. 概述2.2. 创建与调用2.3. 存储过程参数2.4. 变量2.5. 存储过程 使用2.6. 存储过程的控制语句1. 函数1.1. 查看方法基本查看方法查询数据库中的存储过程和函数 select `name` from mysql.proc where db = 'xx' and `type` = 'PROCEDURE' //存储过程 select `name`原创 2020-10-30 15:55:51 · 202 阅读 · 0 评论 -
【MySQL】环境配置
目录1. 环境变量配置1.1. session & global1.1.1. 修改全局变量1.1.2. 会话级别(session)1.2. 静态参数和动态参数2. 配置项2.1. SQL Mode2.1.1. 查看与设置2.1.2. 版本变更2.1.3. 最常用 sql_mode1. 环境变量配置1.1. session & global默认不填写就是session级别;1.1.1. 修改全局变量在MySQL中要修改全局(glob原创 2020-09-07 21:26:32 · 332 阅读 · 0 评论 -
【MySQL语法】DDL语句
目录1. DDL语句1.1. 基本语句1.2. 表复制1.2.1. 新表不存在1.2.2. 新表存在1. DDL语句数据定义语言 DDL(Data Ddefinition Language)CREATE,DROP,ALTER主要为以上操作 即对逻辑结构等有操作的,其中包括表结构,视图和索引。1.1. 基本语句1.2. 表复制概述CREATE TABLE A LIKE B;CREATE TABLE A AS SELECT x,x,x,xx FROM B LI原创 2020-10-27 16:05:46 · 165 阅读 · 0 评论 -
【MySQL语法】分发规则 partition等
目录1. 分发规则2. 水平分区3. 垂直分区 partition3.1. 分区示例3.1.1. partition by3.1.2. 分区管理3.2. 优势1. 分发规则2. 水平分区概述= 水平分区(根据列属性按行分)=举个简单例子:一个包含十年发票记录的表可以被分区为十个不同的分区,每个分区包含的是其中一年的记录。水平分区的模式Range(范围) – 这种模式允许DBA将数据划分不同范围。例如DBA可以将一个表通过年份划分成三个分区,80年代原创 2021-03-16 20:46:31 · 134 阅读 · 0 评论 -
【MySQL语法】02 语法再探
目录1. MySQL 高级1.1. Prepare 语句1.1.1. 语法1.1.2. 应用 & 优势1.2. .1.2.1. MySql创建自定义函数(Function)2. 子查询2.1. 概述2.1.1. 概述2.1.2. 分类2.2. EXISTS & IN2.2.1. exists2.2.2. in、not in、exists和not exists的区别:2.2.2.1. exists & in2.2.2.2.原创 2020-08-12 19:56:04 · 147 阅读 · 0 评论