![](https://img-blog.csdnimg.cn/20210302124830659.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
MySQL
个人对于MySQL的学习手记
至学者
有道无术,术尚可求,有术无道,止于术!
展开
-
Mysql与时间有关逻辑
Mysql 按天,周,月,季信息获取时间原创 2022-07-11 23:43:49 · 115 阅读 · 0 评论 -
基于MyBatisPlus生成策略好用的公共建表语句
一 概述 基于MyBatisPlus生成策略,存在主键id,乐观锁version,createTime,updateTime,del_flag等字段。@Datapublic class CommonEntity implements Serializable { private static final long serialVersionUID=1L; /** * 主键ID */ @TableId(value = "id", type ...原创 2022-04-22 07:50:37 · 802 阅读 · 0 评论 -
回顾数据库回表
一 概述什么是 MySQL 的“回表”? (baidu.com)https://baijiahao.baidu.com/s?id=1721822869837734596&wfr=spider&for=pc 先参考一下,后续根据SQL进行演示总结。原创 2022-03-06 18:22:21 · 89 阅读 · 0 评论 -
回顾为什么数据库中建议使用自增主键
一 概述回顾索引数据之B+Tree:回顾数据库之B-Tree和B+Tree_calm_encode的博客-CSDN博客https://blog.csdn.net/calm_encode/article/details/123313255 回顾B+树存储的数据量:探讨B+Tree存储数据的量_calm_encode的博客-CSDN博客https://blog.csdn.net/calm_encode/article/details/123313488一颗B...原创 2022-03-06 18:17:45 · 644 阅读 · 0 评论 -
探讨B+Tree存储数据的量
一 概述 可以简单的回顾B+Tree数据存储的相关的内容:回顾数据库之B-Tree和B+Tree_calm_encode的博客-CSDN博客https://blog.csdn.net/calm_encode/article/details/123313255二 B+Tree存储数据的量计算机在存储数据的时候,最小存储单位是以扇区计算,一个扇区的大小是512字节,而文件系统(如XFS/EXT4)最小单位是块,一个块的大小是4KB。 InnoDB引擎存...原创 2022-03-06 17:51:22 · 689 阅读 · 0 评论 -
回顾数据库之B-Tree和B+Tree
一 概述我们在使用数据库的时候,经常会使用到索引,此时的就会设计到索引的数据结构,其实我们都听说过B+Tree这个接口。二 B+Tree和B-Tree在索引的B-Tree结构中,每个节点都会带有指向具体记录的指针,同时不同的叶子节点之间没有连在一起,对于B-Tree的检索来说,可能在非叶子节点就能获取到指向具体记录的指针,搜索效率不稳定。在索引的B+Tree结构中,只有叶子节点会带有指向具体记录的指针,且所有的叶子节点都通过指针连接在一起,这样获取数据的时候只...原创 2022-03-06 17:14:59 · 483 阅读 · 0 评论 -
如何在group by分组后所有组中某字段最小,最小值的记录
一 概述业务场景为某个SPU中存在多个SKU,在需要展示SPU的时候需要默认展示一个SKU的属性,取该SPU下售价最低(高)的SKU,此时我们就需要查出所有SPU同时展示每个SPU下售价最低(高)SKU的属性值。二 实现此时存在多张表的连表操作,此时需要对SPU表的id或者唯一索引字段进行group by操作,同时我们也会想到分组之后使用聚合函数MIN(column)来找到最小记录列或者MAX(column)来找到最大记录列。select column1f...原创 2022-02-22 08:29:35 · 3114 阅读 · 2 评论 -
回顾阿里云数据库Specified key was too long; max key length is 767 bytes
一 概述我在通过执行语句创建索引的时候,提示一下信息:LTER TABLE `table_name` ADD KEY `index_name`(`unionid`,`used_flag`)Specified key was too long; max key length is 767 bytes【解决方法】:在DMS中为MySQL建立索引时出现“Specified key was too long; max key length is 767 bytes”报错 - 阿里云https://hel原创 2022-02-12 16:27:02 · 777 阅读 · 0 评论 -
如何利用阿里云控制台恢复错误的delete操作
一 概述 进入阿里云数据库管理台,找到数据方案 新建追踪任务,包括具体的表以及插入,更新,删除等操作。二 不同的删除操作的区别 上述为delete的操作,我的理解为通过Mysql中的redo log进行回滚操作。 不同的删除操作可以参考这篇文章:回顾drop,truncate,delete操作的区别_calm_encode的博客-CSDN博客https://blog.csdn.net/calm_enc...原创 2021-12-15 23:03:14 · 712 阅读 · 0 评论 -
回顾Mysql中聚合函数之concat和GROUP_CONCAT
一 概述 在我们查询数据的时候经常会有单行数据多字段和多行数据同一个字段的拼接操作,此时我们就可以分别通过concat和GROUP_CONCAT来实现。二 具体实现单行数据多字段拼接select concat("{",'"主"',":",good_id,",",'"升级"',":",promotion_goods_id,",",'"主num"',":",goods_nums,"}") from tableName where id = 257; ...原创 2021-11-24 19:20:04 · 1784 阅读 · 0 评论 -
count distinct case when 条件 then 结果 end 的使用
一 概述 当我需要统计条件计算然后去重实现数据查询的时候,我们就可以通过:count distinct case when等关键字实现逻辑查询。二 使用过程SET @start_time = '2022-10-18 00:00:00',@end_time = '2022-10-19 23:59:59';SELECT concat( LEFT ( @start_time, 10 ), ( '至' ), LEFT ( @end_time, 10 ) ) ...原创 2021-11-23 19:59:01 · 5444 阅读 · 0 评论 -
MySQL中的timediff、timestampdiff、datediff
一 概述 Mysql中进行时间差计算的时候可以使用这些方式:二 不同方法的介绍 时间问题,先看一个比较好的博文,后续继续分析: 参考:MySQL学习笔记:timediff、timestampdiff、datediff - Hider1214 - 博客园 (cnblogs.com)https://www.cnblogs.com/hider/p/9067010.html 未完。。。...原创 2021-11-23 19:51:30 · 678 阅读 · 0 评论 -
Mysql设置变量
一 概述 有些时候我们需要设置一些变量。二 实现方式 简要使用SET @start_time = '2022-10-18 00:00:00',@end_time = '2022-10-19 23:59:59'; 详细使用待续 。。。原创 2021-11-23 19:46:06 · 983 阅读 · 0 评论 -
回顾drop,truncate,delete操作的区别
一 概述 对于数据库操作中经常会出现删除内容的操作,此时涉及的操作有delete,truncate,drop等操作。二 个人对delete,truncate,delete的理解和使用 delete 操作可以将某些满足条件的行进行删除,但是对主键的自增顺序不会有变化。 如删除id为4的记录,下次插入数据id自增默认从5开始。 turncate想要清掉数据库的数据而保留表结构。 drop在建表之间都会使用drop t...原创 2021-11-18 18:57:50 · 880 阅读 · 0 评论 -
回顾order by field 和 order by instr 自定义排序
一 概述 当我们需要某些数据按照我们规定的查询和排序的时候,而不是简简单单的按照in语法进行数据查询然后根据大小排序,此时我们就可以通过我们order by field 和 order by instr来自定义顺序。二 order by field SQLselect * from loan where id in (11,3,7,9) order by field(id,11,3,7,9); 结果三 order ...原创 2021-11-17 20:18:01 · 874 阅读 · 0 评论 -
Linux系统下数据库表名大小写问题
MySQL默认是区分表名大小写的,通过如下设置,可以让MySQL不区分表名大小写:1、用root登录,修改 /etc/my.cnf;2、在[mysqld]节点下,加入一行: lower_case_table_names=13、重启MySQL即可;其中 lower_case_table_names=1 参数缺省地在 Windows 中这个选项为 1 ,在 Unix 中为 0,因此在window中不会遇到的问题,一旦一直到linux就会出问题的原因(尤其在mysql对表起名时是无法用大写字母的,而查询原创 2021-11-10 14:12:47 · 1488 阅读 · 0 评论 -
回顾一条SQL的执行过程
一 概述MySQL 主要分为 Server 层和引擎层,Server 层主要包括连接器、查询缓存(MySQL 8.0 版本后移除,因为这个功能不太实用)、分析器、优化器、执行器,同时还有一个日志模块(binlog),这个日志模块所有执行引擎都可以共用,redolog 只有 InnoDB 有。引擎层是插件式的,目前主要包括,MyISAM,InnoDB,Memory 等。SQL 等执行过程分为两类,一类对于查询等过程如下:权限校验(连接器)—>查询缓存—>分析器(词法分析)—...原创 2021-10-25 18:22:14 · 87 阅读 · 0 评论 -
回顾MySQL中的保留字
一 概述 MySQL是由关键字组成的语言,关键字是一些用于执行MySQL的特殊词汇。在命名数据库,表,列和其他数据库对象的时候,一定要避免使用这些关键字。二MySQL 5以后的版本中的保留字注意:MySQL 在 Windows 下不区分大小写,但在 Linux 下默认是区分大小写。因此,数据库名、表名、字段名,都不允许出现任何大写字母,避免节外生枝。...原创 2021-10-25 07:54:39 · 576 阅读 · 0 评论 -
回顾Mysql的优化
一 概述在MySQL中,尽量使用JOIN来代替子查询.因为子查询需要嵌套查询,嵌套查询时会建立一张临时表,临时表的建立和删除都会有较大的系统开销,而连接查询不会创建临时表,因此效率比嵌套子查询高。 待续。。。...原创 2021-10-18 17:06:19 · 52 阅读 · 0 评论 -
回顾Mysql中事务的基本概念与常见业务的关系
一 概述在MySQL中,尽量使用JOIN来代替子查询.因为子查询需要嵌套查询,嵌套查询时会建立一张临时表,临时表的建立和删除都会有较大的系统开销,而连接查询不会创建临时表,因此效率比嵌套子查询高。...原创 2021-10-18 17:07:46 · 107 阅读 · 0 评论 -
回顾SQL中的JOIN
一 概述待续原创 2021-10-15 16:51:15 · 74 阅读 · 0 评论 -
一个;号引发的SQL问题
一 概述 今天开发的时候出现一个奇怪的问题,我对数据库的使用了别名plg,但是提示如下信息: Caused by: java.sql.SQLSyntaxErrorException: Unknown table 'plg' in field list二 解决过程 分析可知,是查询条件中提示这个问题,所以一个个去分析,但时间还没看出来,我让另一个同时帮忙看,挺久的也没看出来。 冷静一段时间后,回想,这个应该是from语句没起作用哇,此...原创 2021-10-14 10:43:23 · 65 阅读 · 0 评论 -
Retail_HikariCP - Exception during pool initialization
一 概述 最近重装电脑之后,原来能够启动运行正常的项目突然启动正常了但是请求数据库的时候,就提示:Retail_HikariCP - Exception during pool initialization。二 解决方法 查资料得知:you need either to explicitly disable ssl by setting usessl=false, or set usessl=true and provide trustsore f...原创 2021-09-23 08:23:28 · 554 阅读 · 0 评论 -
待回顾的知识
Mysql回表Mysql索引覆盖Mysql联合索引Mysql最左匹配Mysql索引下推自旋锁原创 2021-08-27 17:38:51 · 65 阅读 · 0 评论 -
Lock wait timeout exceeded; try restarting transaction
一 概述 今天在本地debug代码的时候,没有断点执行完毕,导致测试环境前端调用测试服务器服务的时候出现了问题: 1.org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLTransientConnectionException: Retail_HikariCP - Conn...原创 2021-08-26 22:18:25 · 167 阅读 · 0 评论 -
回顾Join语句的优化
一 概述Join语句的两种算法,分别是 Index Nested-Loop Join(NLJ) 和 Block Nested-Loop Join(BNL)。算法是优化器自己选择的。 待续。原创 2021-08-16 23:14:14 · 53 阅读 · 0 评论 -
回顾数据库事务中的隔离性
一 概述提到事务,你肯定会想到 ACID(Atomicity、Consistency、Isolation、Durability,即原子性、一致性、隔离性、持久性),今天我们就来说说其中 I,也就是“隔离性”。当数据库上有多个事务同时执行的时候,就可能出现脏读(dirty read)、不可重复读(non-repeatable read)、幻读(phantom read)的问题,为了解决这些问题,就有了“隔离级别”的概念。Atomicity(原子性):一个事务(trans...原创 2021-08-16 23:08:53 · 628 阅读 · 0 评论 -
回顾查询数据库事务
一 MySQL与Oracle数据库事务的区别MySQL默认的隔离级别是repeatable read。Oracle 数据库的默认隔离级别其实就是“读提交”,因此对于一些从 Oracle 迁移到 MySQL 的应用,为保证数据库隔离级别的一致,你一定要记得将 MySQL 的隔离级别设置为“读提交”。二 查询数据库事务mysql> show variables like 'transaction_isolation';+---------------...原创 2021-08-16 22:55:32 · 159 阅读 · 0 评论 -
回顾数据库中的长事务
查找某个数据库中某个数据表持续时间超过60s的事务:select * from dbName.tableName where TIME_TO_SEC(timediff(now(),trx_started))>60待续。。。原创 2021-08-16 22:51:56 · 201 阅读 · 0 评论 -
MySQL查询结果中Duration Time和Fetch Time的含义
一 查询二 Duration和Fetch的含义mysql duration and fetch time - Stack OverflowMySQL :: Re: Getting the execution time of a queryFetch time- measures how long transferring fetched results take, which has nothing to do with query execution. I would not co.原创 2021-08-15 10:57:49 · 3362 阅读 · 0 评论 -
优化大数据表的查询
待续...原创 2021-08-14 23:36:29 · 148 阅读 · 0 评论 -
回顾清空表结构
TRUNCATE TABLE `表名`;待续原创 2021-08-10 17:22:07 · 112 阅读 · 0 评论 -
回顾MySQL UNION的使用
一 概述 MySQL NUION操作符用于将两个查询的结果集组合成一个结果集,同时当多个查询的结果重复时,会自动实现去重操作。二 基本语法select column1,column2,column3 ... from table where conditionsunion [all | distinct]select column1,column2,column3 ... from table where conditions语法解释 column1,col...原创 2021-08-08 08:29:58 · 709 阅读 · 0 评论 -
Mysql中TIMESTAMP时间进位问题
一 SQLPreparing: INSERT INTO user (start_time,create_time) VALUES ( ?, ? ) Parameters: 2021-07-23T11:25:49.737(LocalDateTime),2021-07-23T11:25:49.737(LocalDateTime) 分析:可以看到日志中的start_time,create_time都是带有毫秒的。但是进入数据库之后时间就发生了进位,毫秒值没有了且秒...原创 2021-08-04 08:24:30 · 853 阅读 · 0 评论 -
通过SQL编程实现插入大数据量的数据
百万数据插入DROP FUNCTION IF EXISTS mock_data;-- 写函数之前必须要写,标志:$$DELIMITER $$CREATE FUNCTION mock_data()RETURNS INT-- 注意returns,否则报错。BEGINDECLARE num INT DEFAULT 1000000;-- num 作为截止数字,定义为百万,DECLARE i INT DEFAULT 0;WHILE i num DOINSERT INTO app_user(`n原创 2021-07-21 09:45:10 · 1102 阅读 · 0 评论 -
回顾 mysql 中 where 、 group by 、having、order by 的执行顺序
一 概述 一个SQL语句往往会产生多个临时视图,那么这些关键字的执行顺序就非常重要了,因为你必须了解这个关键字是在对应视图形成前的字段进行操作还是对形成的临时视图进行操作,这个问题在使用了别名的视图尤其重要。二 where;group by;having;order by的执行顺序...原创 2021-07-20 21:03:40 · 488 阅读 · 0 评论 -
回顾数据索引的日常操作
一 创建索引CREATE <索引名> ON <表名> (<列名> [<长度>] [ ASC | DESC])<索引名>:指定索引名。一个表可以创建多个索引,但每个索引在该表中的名称是唯一的。 <表名>:指定要创建索引的表名。 <列名>:指定要创建索引的列名。通常可以考虑将查询语句中在 JOIN 子句和 WHERE 子句里经常出现的列作为索引列。 <长度>:可选项。指定使用列前的 length 个字符原创 2021-07-17 17:08:02 · 302 阅读 · 2 评论 -
数据库的行格式ROW_FORMAT
一 概述 在MySQL中,所谓Row Format行格式是指数据记录(或者称之为行)在磁盘中的物理存储方式。具体地,对于InnoDB存储引擎而言,常见的行格式类型有Compact、Redundant、Dynamic和Compressed。...原创 2021-06-03 20:51:34 · 1033 阅读 · 1 评论 -
数据库乐观锁导致数据更新失败
一 参考资料原创 2021-06-03 20:09:21 · 1038 阅读 · 0 评论 -
MySQL中的BTREE索引对于varchar类型长度的限制
一 概述 varchar(191)可以,varchar(192) 不可以,具体原因有待研究二 实际yang'zhe原创 2021-06-02 21:28:00 · 331 阅读 · 1 评论