![](https://img-blog.csdnimg.cn/20191115185853794.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
MySQL
吴声子夜歌
个人学习记录
展开
-
MySQL——分区表
在RANGE、LIST和[LINEAR] HASH分区中,分区的列的值被传递给分区函数,该函数返回一个整数值,表示该特定记录应该被存储在第几个分区。如果想在数据库中存储一些事件,并且所有的查询都基于一个时间范围,则可以像这样使用分区。如果希望将现有的一个表转换为分区的表,如果分区键不是主键的一部分,则需要删除(drop)主键,并将分区键作为主键和所有唯一键的一部分添加进来。LIST分区与RANGE分区类似,其每个分区都是根据一组值列表中的一个列值的成员来定义和选择的,而不是在一组连续的值范围内进行。原创 2023-04-08 14:16:48 · 204 阅读 · 0 评论 -
MySQL——JSON类型
如果json_doc参数不是一个有效的JSON文档,任何路径参数不是一个有效的路径表达式,one_or_all不是’one’或’all’,或者escape_char不是一个常量表达式,就会发生错误。如果插入的值中存在重复 KEY,在 MySQL 8.0.3 之前,遵循 first duplicate key wins 原则,会保留第一个 KEY,后面的将被丢弃掉。之前,这类数据不是单独的数据类型,会被存储为字符串。从指定文档中给定的路径处的JSON文档中提取值,并返回提取的值,可以将其转换为所需的类型。原创 2023-04-08 01:39:34 · 2410 阅读 · 0 评论 -
MySQL——窗口函数
语法函数名称([字段名]) OVER([PARTITION BY <分组字段>][ORDER BY <排序字段> [DESC]] [<FRAME字句>])PARTITION BY字句:按照指定字段进行分区,两个分区由边界分割,即所谓的"窗口"。如果没有指定,那么它把整个结果集作为一个分组。窗口函数在不同的分区内分别执行,在跨越分区边界时重新初始化。ORDER BY子句:按照指定字段进行排序,开窗函数将按照排序后的记录顺序进行编号。可以和PARTITION BY子句原创 2021-10-03 23:46:36 · 1564 阅读 · 0 评论 -
MySQL--批量数据脚本
批量数据脚本建表:CREATE TABLE dept(id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,deptno MEDIUMINT UNSIGNED NOT NULL DEFAULT 0,dname VARCHAR(20) NOT NULL DEFAULT '',ioc VARCHAR(13) NOT NULL DEFAULT '')ENGI...原创 2019-11-29 13:48:47 · 368 阅读 · 0 评论 -
MySQL--主从复制
主从复制原创 2019-12-02 10:01:06 · 256 阅读 · 0 评论 -
MySQL--行锁案例分析
行锁案例分析建表及准备数据:CREATE TABLE `test_innodb_lock`(a INT(11),b VARCHAR(16))ENGINE INNODB;INSERT INTO test_innodb_lock values(1, 'b2');INSERT INTO test_innodb_lock values(3, '3');INSERT INTO test_i...原创 2019-12-02 10:00:43 · 290 阅读 · 0 评论 -
MySQL--索引失效行锁变表锁、间隙锁的危害、如何锁定一行
建表及准备数据:CREATE TABLE `test_innodb_lock`(a INT(11),b VARCHAR(16))ENGINE INNODB;INSERT INTO test_innodb_lock values(1, 'b2');INSERT INTO test_innodb_lock values(3, '3');INSERT INTO test_innodb_l...原创 2019-12-02 10:00:21 · 696 阅读 · 0 评论 -
MySQL--读锁(表级锁)案例分析
读锁案例分析建表及准备数据:CREATE TABLE mylock(id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,name VARCHAR(20))ENGINE MYISAM;INSERT INTO mylock(name) VALUES('a');INSERT INTO mylock(name) VALUES('b');INSERT I...原创 2019-12-01 14:58:33 · 321 阅读 · 0 评论 -
MySQL--锁机制、事务
锁机制锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中,除传统的计算机资源(如CPU、RAM、I/O等)的争用以外,数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一个重要因素。从这个角度来说,锁对数据库而言显得尤为重要,也更加复杂。锁的分类从对数据操作的类型读锁(共享锁):针对同一份...原创 2019-11-30 13:17:56 · 236 阅读 · 0 评论 -
MySQL--全局查询日志
全局查询日志永远不要在生产环境不要开启这个功能!!!配置启用在mysql的my.cnf中,设置如下:#开启general_log=1#记录日志文件的路径general_log_file=/path/logfile#输出格式log_output=FILE编码启用#开启set global general_log=1;set global log_output='TABLE...原创 2019-11-30 13:17:30 · 282 阅读 · 0 评论 -
MySQL--用Show Profile进行sql分析
Show ProfileShow Profile是MySQL提供给可以用来分析当前会话中语句执行的资源消耗情况,可以用于SQL的调优测量。默认情况下,参数处于关闭状态,并保存最近15次的运行结果。分析步骤查看当前版本是否支持: show variables like ‘profiling’;将其打开 set profiling = on;运行SQLselect * from em...原创 2019-11-29 13:49:09 · 310 阅读 · 0 评论 -
MySQL--慢查询日志、日志分析工具mysqldumpslow
满查询日志MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应超过阀值的语句,具体指运行时间超过long_query_time值的SQL,则会被记录到慢查询日志中。具体指运行时间超过long_query_time值的SQL,则会被记录到慢查询日志中。long_query_time的默认值为10,意思是运行10秒以上的语句。由它来查看哪些SQL超出了我们的最大忍耐...原创 2019-11-26 13:14:11 · 549 阅读 · 0 评论 -
MySQL--索引Order By优化、Group By优化
索引Order By优化建表及准备数据:CREATE TABLE tblA(id INT PRIMARY KEY AUTO_INCREMENT,age INT,birth TIMESTAMP NOT NULL);INSERT INTO tblA(age,birth) VALUES(22,NOW());INSERT INTO tblA(age,birth) VALUES(23,NO...原创 2019-11-26 13:13:44 · 951 阅读 · 0 评论 -
MySQL--小表驱动大表
小表驱动大表原创 2019-11-26 13:13:05 · 277 阅读 · 0 评论 -
MySQL--索引面试题分析
索引面试题分析建表及准备数据:CREATE TABLE test03(id INT PRIMARY KEY NOT NULL AUTO_INCREMENT,c1 CHAR(10),c2 CHAR(10),c3 CHAR(10),c4 CHAR(10),c5 CHAR(10));INSERT INTO test03(c1,c2,c3,c4,c5) VALUES('a1','a2...原创 2019-11-26 13:12:53 · 330 阅读 · 0 评论 -
MySQL--索引失效的各种情况举例分析(一)
索引失效建表及准备数据:CREATE TABLE `staffs`(`id` INT PRIMARY KEY AUTO_INCREMENT,`name` VARCHAR(24) NOT NULL DEFAULT '' COMMENT '姓名',`age` INT NOT NULL DEFAULT 0 COMMENT '年龄',`pos` VARCHAR(20) NOT NULL DEF...原创 2019-11-25 10:33:50 · 344 阅读 · 0 评论 -
MySQL--索引失效的各种情况举例分析(二)
mysql在使用不等于(!= 或 <>)的时候无法使用索引会导致全表扫描is null, is not null 也无法使用索引like 以通配符开头(’%abc…’)mysql索引失效会变成全表扫描的操作解决like ‘%字符串%’时索引失效的方法:CREATE TABLE `tbl_user`(`id` INT(11) NOT NULL AUTO_INCRE...原创 2019-11-25 10:33:29 · 312 阅读 · 0 评论 -
MySQL--索引三表优化案例分析
索引三表优化案例分析在两表的基础上再创建一张表:CREATE TABLE IF NOT EXISTS `phone`(`phoneid` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,`card` INT(10) UNSIGNED NOT NULL,PRIMARY KEY(`phoneid`))ENGINE = INNODB;INSERT INT...原创 2019-11-25 10:33:08 · 279 阅读 · 0 评论 -
MySQL--索引两表优化案例分析
索引两表优化案例分析建表及准备数据:CREATE TABLE IF NOT EXISTS `class`(`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,`card` INT(10) UNSIGNED NOT NULL,PRIMARY KEY (`id`));CREATE TABLE IF NOT EXISTS `book`(`boo...原创 2019-11-25 10:32:45 · 246 阅读 · 0 评论 -
MySQL--索引单表优化案例
索引单表优化建表及插入数据:CREATE TABLE IF NOT EXISTS `article`(#文章表`id` INT(10) UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,#id`author_id` INT(10) UNSIGNED NOT NULL,#作业id`category_id` INT(10) UNSIGNED NOT N...原创 2019-11-25 10:32:19 · 244 阅读 · 0 评论 -
MySQL--explain(执行计划)分析数据详解
explain使用EXPLAIN关键字可以模拟优化器执行SQL查询语句,从而知道MySQL是如何处理你的SQL语句的。分析你的查询语句或是表结构的性能瓶颈。执行计划包含的信息id: SELECT查询的序列号,包含一组数字,表示查询中执行SELECT子句或操作表的顺序,三种情况id相同,执行顺序由上至下id不同,如果是子查询,id的序号会递增,id值越大优先级越高,越先被执行id相...原创 2019-11-25 10:30:24 · 294 阅读 · 0 评论 -
MySQL--索引(分类、语法、检索原理、适用条件)
索引索引(Index)是帮助MySQL高效获取数据的数据结构。可以简单理解为“排好序的快速查找数据结构”。目的: 提高查找效率,可以类比字典。详解:数据本身之外,数据库还维护着一个满足特定查找算法的数据结构,这些数据结构以某种方式指向数据,这样就可以在这些数据结构的基础上实现高级查找算法,这种数据结构就是索引。一般来说索引本身也很大,不可能全部存储在内存中,因此索引往往以索引文件的形式...原创 2019-11-24 15:56:00 · 322 阅读 · 0 评论 -
MySQL--七种JOIN理论详解
七种JOIN理论1. INNER JOIN 内连接2. LEFT JOIN 左连接3. RIGHT JOIN 右连接4. OUTER JOIN 外连接5. LEFT JOIN EXCLUDING INNER JOIN 左连接-内连接6. RIGHT JOIN EXCLUDING INNER JOIN 右连接-内连接7. OUTER JOIN EXCLUDING INNE...原创 2019-11-24 15:55:28 · 943 阅读 · 0 评论 -
MySQL--SQL执行顺序详解
SQL执行顺序(8)SELECT(9)DISTINCT <select_list> (1)FROM <left_table>(3)<join_type> JOIN <right_table>(2)ON <join_condition>(4)WHERE <where_condition>(5)GROUP BY &...原创 2019-11-23 19:23:51 · 336 阅读 · 0 评论 -
MySQL--流程控制结构(循环)
流程控制结构二、循环结构分类:while、loop、repeat循环控制:iterate类似于 continue,继续,结束本次循环,继续下一次leave 类似于 break,跳出,结束当前所在的循环#1.while语法:【标签:】while 循环条件 do 循环体;end while【 标签】;联想:while(循环条件){ 循环体;}#2.loop...原创 2019-11-23 16:17:27 · 328 阅读 · 1 评论 -
MySQL--流程控制结构(分支)
流程控制结构顺序、分支、循环一、分支结构#1.if函数语法:if(条件,值1,值2)功能:实现双分支应用在begin end中或外面#2.case结构/*语法:情况1:类似于switchcase 变量或表达式when 值1 then 语句1;when 值2 then 语句2;...else 语句n;end 情况2:case when 条件1 then...原创 2019-11-23 16:17:03 · 342 阅读 · 0 评论 -
MySQL--函数(创建、调用、查看、删除)
函数含义:一组预先编译好的SQL语句的集合,理解成批处理语句1、提高代码的重用性2、简化操作3、减少了编译次数并且减少了和数据库服务器的连接次数,提高了效率区别:存储过程:可以有0个返回,也可以有多个返回,适合做批量插入、批量更新函数:有且仅有1 个返回,适合做处理数据后返回一个结果一、创建语法CREATE FUNCTION 函数名(参数列表) RETURNS 返回类型BEGI...原创 2019-11-20 18:27:39 · 1849 阅读 · 1 评论 -
MySQL--存储过程(创建、调用、删除、查看)
存储过程存储过程和函数:类似于java中的方法好处:1、提高代码的重用性2、简化操作含义:一组预先编译好的SQL语句的集合,理解成批处理语句1、提高代码的重用性2、简化操作3、减少了编译次数并且减少了和数据库服务器的连接次数,提高了效率一、创建语法CREATE PROCEDURE 存储过程名(参数列表)BEGIN 存储过程体(一组合法的SQL语句)END注意:1、参...原创 2019-11-20 18:00:33 · 979 阅读 · 0 评论 -
MySQL--变量(系统变量、自定义变量)
变量系统变量:全局变量会话变量自定义变量:用户变量局部变量一、系统变量说明:变量由系统定义,不是用户定义,属于服务器层面注意:全局变量需要添加global关键字,会话变量需要添加session关键字,如果不写,默认会话级别使用步骤:1、查看所有系统变量show global|【session】variables;2、查看满足条件的部分系统变量show glo...原创 2019-11-20 16:30:26 · 527 阅读 · 0 评论 -
MySQL--视图
视图含义:虚拟表,和普通表一样使用mysql5.1版本出现的新特性,是通过表动态生成的数据 创建语法的关键字 是否实际占用物理空间 使用视图 create view 只是保存了sql逻辑 增删改查,只是一般不能增删改表 create table 保存了数据 增删改查#案例:查询姓张的学生名和专业名SELECT stuname,majornameFROM stui...原创 2019-11-19 17:24:20 · 381 阅读 · 0 评论 -
MySQL--事务
事务事务:一个或一组sql语句组成一个执行单元,这个执行单元要么全部执行,要么全部不执行。案例:转账张三丰 1000郭襄 1000update 表 set 张三丰的余额=500 where name=‘张三丰’意外update 表 set 郭襄的余额=1500 where name=‘郭襄’事务的特性:ACID原子性:一个事务不可再分割,要么都执行要么都不执行一致性:一个事...原创 2019-11-19 16:31:54 · 443 阅读 · 0 评论 -
MySQL--常见约束、标识列
含义含义: 一种限制,用于限制表中的数据,为了保证表中的数据的准确和可靠性分类:六大约束NOT NULL:非空,用于保证该字段的值不能为空比如姓名、学号等DEFAULT:默认,用于保证该字段有默认值比如性别PRIMARY KEY:主键,用于保证该字段的值具有唯一性,并且非空比如学号、员工编号等UNIQUE:唯一,用于保证该字段的值具有唯一性,可以为空比如座位号CHECK:检...原创 2019-11-19 13:38:52 · 436 阅读 · 0 评论 -
MySQL--基础十四(数据类型)
数据类型数值型:整型小数:定点数浮点数字符型:较短的文本:char、varchar较长的文本:text、blob(较长的二进制数据)日期型:一、整型分类:字节数tinyintsmallintmediumintint/integerbigint12348特点:① 如果不设置无符号还是有符号,默认是有符号,如果想设置无符...原创 2019-11-18 18:21:09 · 472 阅读 · 0 评论 -
MySQL--基础十三(DDL库和表的管理)
DDL数据定义语言:库和表的管理一、库的管理创建、修改、删除二、表的管理创建、修改、删除创建: create修改: alter删除: drop#一、库的管理#1、库的创建/*语法:create database [if not exists]库名;*/#案例:创建库BooksCREATE DATABASE IF NOT EXISTS books ;#2...原创 2019-11-18 12:43:04 · 328 阅读 · 0 评论 -
MySQL--基础十二(DML插入、修改、删除)
DML数据操作语言:插入:insert修改:update删除:delete插入语句语法:insert into 表名(列名,...) values(值1,...);SELECT * FROM beauty;#1.插入的值的类型要与列的类型一致或兼容INSERT INTO beauty(id,NAME,sex,borndate,phone,photo,boyfriend_i...原创 2019-11-18 11:00:22 · 275 阅读 · 0 评论 -
MySQL--基础十五(联合查询)
联合查询union 联合 合并:将多条查询语句的结果合并成一个结果语法:查询语句1union查询语句2union应用场景:要查询的结果来自于多个表,且多个表没有直接的连接关系,但查询的信息一致时特点:★1、要求多条查询语句的查询列数是一致的!2、要求多条查询语句的查询的每一列的类型和顺序最好一致3、union关键字默认去重,如果使用union all 可以包含重复项#引...原创 2019-11-17 23:01:14 · 233 阅读 · 0 评论 -
MySQL--基础十一(分页查询、子查询经典案例)
分页查询应用场景:当要显示的数据,一页显示不全,需要分页提交sql请求语法:1 select 查询列表 2 from 表3 【join type join 表4 on 连接条件5 where 筛选条件6 group by 分组字段7 having 分组后的筛选8 order by 排序的字段】9 limit 【offset,】size; offset要显示条目的起始索引...原创 2019-11-17 21:51:48 · 1066 阅读 · 0 评论 -
MySQL--基础十(子查询)
子查询含义:出现在其他语句中的select语句,称为子查询或内查询外部的查询语句,称为主查询或外查询分类:按子查询出现的位置:select后面:仅仅支持标量子查询from后面:支持表子查询where或having后面:★标量子查询(单行) √列子查询 (多行) √行子查询exists后面(相关子查询)表子查询按结果集的行列数不同:标量子查询...原创 2019-11-17 21:04:39 · 420 阅读 · 0 评论 -
MySQL--基础九(sql99连接查询)
sql99连接查询语法: select 查询列表 from 表1 别名 【连接类型】 join 表2 别名 on 连接条件 【where 筛选条件】 【group by 分组】 【having 筛选条件】 【order by 排序列表】分类:内连接(★):inner外连接左外(★):left 【outer】右外(★):right 【outer】全外:full【o...原创 2019-11-17 17:11:01 · 399 阅读 · 0 评论 -
MySQL--基础八(连接查询)
连接查询含义:又称多表查询,当查询的字段来自于多个表时,就会用到连接查询笛卡尔乘积现象:表1 有m行,表2有n行,结果=m*n行发生原因:没有有效的连接条件如何避免:添加有效的连接条件分类:按年代分类:sql92标准:仅仅支持内连接sql99标准【推荐】:支持内连接+外连接(左外和右外)+交叉连接按功能分类:内连接:等值连接非等值连接自连接外连接:左外连接...原创 2019-11-17 13:44:32 · 472 阅读 · 0 评论