
MySql
文章平均质量分 81
MySql
小道仙97
一个不务正业的程序员,梦想成为家庭煮夫。【五十岁退休】
展开
-
一文弄懂MySQL锁机制【记录锁、间隙锁、临键锁,共享锁、排他锁,意向锁】
没有使用索引做更新相关操作会锁表。通过唯一/主键索引等值加锁,只会锁具体的行,非唯一索引则不一定,SQL优化器会基于数据分布选择记录锁,或临键锁。只有在RR级别下才有间隙锁,目的是为了解决幻读,如果操作的数据是跨多个范围,就会加多个区间的间隙锁。MySQL默认的锁就是【临键锁】,所以在执行SQL的时候,记录锁和间隙锁是会同时存在的。范围是左开右闭的区间。原创 2023-11-10 23:17:10 · 7632 阅读 · 4 评论 -
MySQL 日期【加号/+】条件筛选问题
今天在修改一个SQL的时候发现一个关于时间格式的问题,原SQL如下(已简化)的时候就不再进行后续了。当然这是一种不规范的写法,还是不要这样写为妙。想着会不会是MySQL按照字符串去对比,当对比到。SQL运行也没有问题,但执行结果却和预期不一样。写了一个日期对比的SQL,执行结果如下。...原创 2022-07-21 14:30:35 · 426 阅读 · 0 评论 -
Deadlock found when trying to get lock; try restarting transaction 【MySQL死锁问题解决】
Deadlock found when trying to get lock; try restarting transaction 【MySQL死锁问题解决】最近在调试接口的时候遇到了MySQL死锁问题,我自己测试的时候一切都好好的,但在并发下,就死锁了 其实死锁问题,并没有一个类似“万金油”的解决办法,解铃还需系铃人,能做的只有写这个代码的人自己去解决 第一次出现死锁,想必你也会和我一样整个人都是懵的,不知道如何下手,等你看过下面的文章明白了死锁,就不会害怕了.........原创 2022-06-20 09:26:48 · 39777 阅读 · 2 评论 -
MySQL分组后取最大一条数据【最优解】
有一个简单而又常见的需求:分组后取每组的最大一条数据原创 2022-05-03 23:08:28 · 19396 阅读 · 4 评论 -
MySQL日志之redolog详解【带你了解redolog的使命和使用】
MySQL在innodb引擎下,所做的增删改查都是先去`buffer pool`缓冲池(内存区域)里面操作,再通过种种情况去进行入盘(数据存入磁盘),因为增删改都是在内存操作,这样就存在系统异常导致数据丢失的情况,redolog就是为了解决系统异常导致内存修改丢失的问题原创 2021-12-24 16:17:32 · 6476 阅读 · 1 评论 -
细说InnoDB缓冲池 buffer pool(free、flush、lru)
文章目录一、开篇二、free链表三、flush 链表一、开篇在InnoDB引擎中对数据库的增删改查,都是先从磁盘中把数据加载到内存,然后在内存中进行相关操作,我们把这块的内存称之为 buffer pool (缓冲池)既然这是内存中的一块区域,那么它就一定有大小(默认是128M),如果你有一个16G的数据库服务器,你安装好MySQL,那你的缓冲池的大小就是128M,这时候肯定很影响你的操作,因为它太小了,所以我们应该根据当前条件来对这个参数进行修改:innodb_buffer_pool_size说到数原创 2021-11-28 20:29:36 · 1576 阅读 · 0 评论 -
InnoDB的buffer pool缓冲池 (一个SQL执行的时候,会在buffer pool里面做哪些操作)
上次我们讲过一条SQL从应用程序到数据库要经历哪些过程,想必大家都已经有了大致的了解。但是在讲到buffer pool的时候,我们省略了其中的细节,只是说到数据会先从磁盘加载到内存中去,然后在内存中进行我们的操作,今天我们就来具体看看它在缓冲池中具体要做哪些操作。在具体讲解细节之前,我们先来明确一个概念 事物,大家应该都知道啥是事物,简单来说就是一组命令要么都执着成功,要么都不执行成功。我们操作数据库的时候,不管是一条SQl还是多条SQL都是以事物为维度去执行的。假设一个这样的场景:A向B转500原创 2021-11-23 13:09:54 · 1240 阅读 · 3 评论 -
MySQL执行过程(一条SQL从Java到数据库都经历了什么)
从我们学习Java开始,我们就学了很多种操作数据库的方式,最开始的JDBC、后面的JPA、HIbernate、MyBatis,那你是否想过,我们只是简单的写了一个sql,最终是如何到达数据库、返回结果?这中间都经历了什么呢?不管我们是用原生的JDBC还是后面的ORM框架,我们都会引入这样一个pom文件,这就是MySQL驱动,我们通过这个驱动去连接MySQL<dependency> <groupId>mysql</groupId> <artifa原创 2021-11-14 20:46:22 · 4197 阅读 · 9 评论 -
MySQL,MVCC详解,快照读在RC、RR下的区别
最近感觉写博客越来越难写了,不再像以前对于写出来的东西只是为了一个产出,不去看质量。就比如说学习这个MVCC的时候,别的博客都已经写的很好了,但是不去自己按照理解写出来又好像不合适。(诚然我写出来的不可能是比那些大佬写得好)一、什么是MVCC我们在操作数据库的时候总是这四大类 读读 读写 写读 写写,读读肯定是没有任务数据问题的,但对事物有了解的同学就会知道,读写、写写操作很容易就会导致数据不一致。在此之前解决这类问题的常用方式就是加锁,听名字就知道这是个很复杂、很耗性能的操作,所以大神们不满足这个原创 2021-10-31 20:09:46 · 2394 阅读 · 0 评论 -
MySQL日志篇,MySQL日志之binlog日志,binlog日志详解
多少啊原创 2021-10-16 19:15:18 · 15834 阅读 · 0 评论 -
MySQL索引详解【B+Tree索引、哈希索引、全文索引、覆盖索引】
前段时间面试每次提到索引,我就巴拉巴拉说一堆,然后到了说说你理解的 B+tree索引我就懵逼了。直接说B+tree可能并不是很好理解,下面我们从最简单的二叉查找树开始慢慢循序渐进。一、B+Tree索引1、二叉查找树在最开始学习树的时候,我们一定学习过这样一种结构的二叉树根结点大于它的左节点,小于它的右节点。如果我们要在上述的二叉树里面去查询 6 ,只需要三步即可找到根节点 10 ,判断6比10小,寻左结点找到结点 5 , 判断6比5大,寻右结点找到结点 6,判断6符合查找需要2原创 2021-09-20 11:45:59 · 2279 阅读 · 0 评论 -
MySQL之explain关键字详解
本文转自:https://segmentfault.com/a/1190000021458117?utm_source=tag-newesthttps://www.cnblogs.com/tufujie/p/9413852.html文章目录一、开始二、字段含义2-1、id2-2、select_type2-3、table2-4、partitions2-5、type2-6、possible_keys2-7、key2-8、key_len2-9、ref2-10、rows2-11、filtered转载 2021-07-05 16:24:47 · 409 阅读 · 0 评论 -
MySql分组查询规则
思考一下假如你有一个这样的需求 有一张账单表(bill_detail),一张开票表(open_invoice)每一个用户有三种费用类型,分别是水费、污水费、违约金。(分别对应cost_type = 01、02、03)现在要查询每个用户的欠费总额,和是否开票。(注:只有水费可以开票,其它的不需要)账单表(bill_detail)CREATE TABLE `bill_detail` ( `id` VARCHAR(50) NOT NULL COMMENT 'id', `cost_type`.原创 2021-03-30 14:40:24 · 443 阅读 · 0 评论 -
MySql关键字GROUP_CONCAT,组合连接查询
一、试着想一下如果有这样一个需求应该怎么去做:有一张学生表,和一张分数表。要查出每个学生姓名和分数,分数以逗号隔开eg:张三 80,90,100这个需求很简单,有很多种办法来解决,最简单的是我们可以先查询学生,然后再去查询分数,最后由程序代码组装。学生表(stu)idname1张三2李四3王五分数表(course)idnamestu_idscore1语文1802数学1903英语175原创 2021-03-25 15:09:01 · 611 阅读 · 0 评论 -
MySql分表设计,Java分表设计
文章目录一、前言1-1、什么时候需要分表呢?1-2、分表的规则是什么呢?1-2-1、分表前后1-2-2、其它二、举例场景三、实现分表功能3-1、数据的增删改3-2、数据的查询3-3、自动创建表3-4、其它一、前言1-1、什么时候需要分表呢?这个其实就很简单了,就是当表数据太大的时候,一个表里面存储不下,或者存储后影响使用(比如数据多的时候就影响查询效率)1-2、分表的规则是什么呢?一般来说我们都是根据数据量来分表的,数据存储是为了后面使用,所以我们表名也应该清楚明了。我们可以根据数据量分为、天原创 2021-03-09 19:51:53 · 1078 阅读 · 1 评论 -
MySql左连接(left join)无法全部查询出来问题
今天在写一个sql的时候,碰到一个知识盲区,也是我对 left join 理解的错误。一、表结构学生表CREATE TABLE stu ( `id` varchar(50) NOT NULL COMMENT '主键ID', `name` varchar(50) NOT NULL COMMENT '学生姓名', PRIMARY KEY (`id`) USING BTREE) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='学生表';课.原创 2021-02-01 20:07:17 · 3789 阅读 · 1 评论 -
Linux开启定时任务,定时备份MySql数据
一、编辑定时任务为了直观的体现定时任务,这里模拟一个简单的场景,就是每次往一个txt文件里面添加数据1-1、准备一个txt文件touch /xdx/xdx.txt1-2、准备一个追加信息的命令echo "hello word" >> /xdx/xdx.txt1-3、写到定时任务里面去vim /var/spool/cron/root 把下面的这个命令写进去,前面是定时任务执行的频率,现在配置的是每分钟执行一次。*/1 * * * * echo "hello word"原创 2020-12-09 16:47:26 · 419 阅读 · 0 评论 -
Sql一对多关联最新的一条数据
我们有如下表结构,一个是用户表,一个是记录表,一个用户会有多条记录,现在我们需要去查询出来每个用户的信息和最新的操作记录(这里以id值最大为最新的)CREATE TABLE `record` ( `id` int(11) NOT NULL, `u_id` int(11) DEFAULT NULL, `name` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;C原创 2020-11-08 17:35:41 · 3977 阅读 · 0 评论 -
PageHelper无效问题解决
1、如果你使用的是 springBoot 那么应该引入下面的依赖 (版本号自己确定) <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId>2、SpringMvc里面引入下面的依赖(版本号自己确定)<groupId>com.github.pagehelper</groupId><a原创 2020-08-17 13:21:53 · 1596 阅读 · 1 评论 -
MySQL索引最左匹配原则
一、explain 关键字在弄懂MySQL索引的最左匹配原则之前,我们需要先了解一下 explain 关键字我在学习explain关键字的时候找到了一张很好的图,但是我现在找不到出处了,只记得是在思否上面的,如果侵权联系我删掉二、创建数据库create table test(a int ,b int,c int,d int,key index_abc(a,b,c))engine=InnoDB default charset=utf8;DROP PROCEDURE IF EXIST原创 2020-08-05 20:22:59 · 649 阅读 · 0 评论 -
基于SpringBoot的多数据源配置
文章优先发表在个人博客:https://www.xdx97.com/article/736976551236599808多数据源:就是可以同时操作多个数据库,之前我们的增删改查都是在一个数据库上面操作,现在可以同时操作多个数据库。一、基于SpringBoot+MybatisPlus实现多数据源基于MybatisPlus是最简单的一种实现方式了为了代码的简介,直接使用controller去调用mapper1-1:pom.xml<?xml version="1.0" encod.原创 2020-07-26 16:28:00 · 219 阅读 · 0 评论 -
MySql 分组后获取每组的最大值、最小值
文章优先发表在个人博客:https://www.xdx97.com/article/733451395906142208假设这样一个场景 我们需要获取每个班分数最高的人全部信息(或者最低的人)最后结果如下:一、思路先找到每个班的最高分,然后再连接查询。1-1、获取每个班最高分的sqlSELECT MIN(score) score FROM xdx_test GROUP BY class1-2、连接查询出想要的结果SELEC.原创 2020-07-16 22:43:13 · 5858 阅读 · 4 评论 -
MySql分组后随机获取每组一条数据
文章优先发表在个人博客,本篇文章地址:https://www.xdx97.com/article/730173966978646016思路:先随机排序然后再分组就好了。1、创建表:CREATE TABLE `xdx_test` ( `id` int(11) NOT NULL, `name` varchar(255) DEFAULT NULL, `class` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB .原创 2020-07-07 21:34:08 · 2836 阅读 · 0 评论 -
MySql的主从复制、主主复制【MySql 5.7,Docker】
一、环境准备我们需要准备两台MySql,我这里使用docker,那么我就需要开启两个MySql容器就好了。docker安装MySql看这里 Docker安装MySql并启动docker相关命令 Docker常用命令【镜像、容器、File】持续更新…二、主从复制2-1:配置主服务器2-1-1:配置主服务器的 my.cnf 添加以下内容[mysqld]## 同一局域网内注意要唯一server-id=1## 开启二进制日志功能,可以随便取(关键)log-bin=mysql-bin如原创 2020-05-21 16:47:11 · 2528 阅读 · 3 评论 -
关于sql,group by查询多字段的问题。
文章优先发表在个人博客,后续更新可能忘记同步到CSDN。个人博客本篇文章位置:https://www.xdx97.com/article?bamId=662638428143222784使用GROUP BY后,每一类的数据都是取自默认排序的第一条。假如有下面这样一张表(表名 xdx_test),我们需要对其进行如下操作。idnametypescore1张三...原创 2020-01-03 13:28:27 · 3036 阅读 · 0 评论 -
什么是MySql注入,怎么防止MySql注入。
什么是MySql注入1、先来看百度百科是怎么说的SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。简单说,就是我们在拼接sql的时候,没有过滤用户的非法sql,导致查询结果和我...原创 2019-12-30 16:36:08 · 1046 阅读 · 0 评论 -
MySql查询上一篇文章和下一篇文章,上一条数据,下一条数据
1、所有文章优先发表在个人博客上: https://www.xdx97.com2、后续如果有修改的话,可能忘记更新到CSDN了,给你带来不便,抱歉。3、个人博客本篇文章地址 : https://www.xdx97.com/article?bamId=646739107409559552# blog_article_main 表名# bam_id 主键id# gmt_create 这...原创 2019-11-20 15:51:42 · 680 阅读 · 0 评论 -
根据表字段名的不同值,去关联不同的表获取不同的数据
今天遇到一个这样的需求:1、查询一个表(c)的数据,表里面有个type字段2、type = 1,就关联表a,查询a.xxxx,type = 2,就关联表b,查询b.yyyy2、查询出来的别名是 cccc表结构表名字段名字段名字段名ctypea_idb_idaa_idxxxxa_namebb_idyyyyb_nameSELECT...原创 2019-10-21 17:54:47 · 1150 阅读 · 0 评论 -
MySql查询字段为NULL或为空串的数据
1、查询字段为NULL的数据WHERE bam_id IS NULL2、查询字段为空串的数据WHERE sup_cm_id = ''WHERE LENGTH(COMMENT .sup_cm_id) < 1原创 2019-10-13 16:12:47 · 2176 阅读 · 0 评论 -
MySQL中, 如何查询某一天, 某一月, 某一年的数据.
文章转自:https://www.cnblogs.com/qlqwjy/p/7718219.html今天select * from 表名 where to_days(时间字段名) = to_days(now());昨天SELECT * FROM 表名 WHERE TO_DAYS( NOW( ) ) - TO_DAYS( 时间字段名) <= 1近7天SE...转载 2019-02-14 13:13:46 · 791 阅读 · 0 评论 -
mysql 级联删除 【简单详细】
目的:使用 mysql 完成级联删除 为什么写这篇文章呢?主要是感觉网上写都太复杂了,什么原理的。有时候,读者只是想用最快的速度去解决这个问题。 1、你在创建主外键的时候要加上 ON DELETE CASCADE 这个关键字,就可以实现级联删除。 2、现在你既然遇到了这个问题,说明你创建主外键的时候并没有加上这个关键字。那么你就删除之前的 主外键,再次创建就可以了。...原创 2018-12-10 13:28:24 · 2903 阅读 · 0 评论 -
Mysql 聚合函数嵌套使用
目的:Mysql 聚合函数嵌套使用聚合函数不可以直接嵌套使用,比如: max(count(*))但是可以嵌套子查询使用 eg:注:后面那个 as 必须要写select max(total) from ( select count(*) as total from blog group by btype) as aa;...原创 2018-10-23 16:49:39 · 3078 阅读 · 7 评论 -
mysql,mariaDB设置编码,阿里云Centos7设置编码
问题描述:我们有时候需要在数据库存取中文数据,但是数据库默认编码一般不支持中文。所以需要我们自己设置。注:网上很多都说用命令去设置,但是关掉之后又变成原来样了,没有用。这里我教大家改一下配置文件,不难的噢。说明:mysql和mariaDB是一样的这里也简单说一下windows下面的设置吧。找到你的my.ini文件,在里面添加下面两句代码[mysql]# 设置mysql客户端...原创 2018-06-12 18:40:25 · 378 阅读 · 0 评论 -
mysql,MariaDB。数据库乱码,编码设置。LIinux(centos)乱码
问题说明:我写了WEB项目,在本地测试没问题,然后发布了阿里云(centos7)上。有一个从页面收集数据功能,收集来的数据都是乱码(??????这样的)。问题解决:遇到这样的问题,无非就是编码没有统一咯。想办法去统一编码就好了。(我最后所有的编码都是utf-8);第一步:首先你得测试一下你后台接受的数据是正常的中文。这里有一个解决post提交乱码解决的博客(get提交自行百度)...原创 2018-06-12 18:42:41 · 234 阅读 · 0 评论 -
sql 按照时间来分组, 时间的,年、月、日。统计数量
其实就是两步,第一:转换时间格式,二按照转换的时间格式去分组。其实第二步的话,就很简单了只要学了一点的都知道分组,但是时间格式的话,因为用的比较少所以很多新手完全不知道。时间转换方法DATE_FORMAT() API---->http://www.w3school.com.cn/sql/func_date_format.asp下面给出相对应的sql语句(bcreateda...原创 2018-06-04 19:11:39 · 2119 阅读 · 0 评论 -
MySql 循环执行语句,循环执行update,详细介绍【游标嵌套】
今天在工作的时候,遇到一个需求。 需要去把一个字段(原本是uuid),改成00001,00002,这样的格式。如果是数据比较少当然无所谓了,但是表里面有上千条数据,这个时候再去手动修改就不科学了。本能的想到了for循环去执行,然后老大丢了一个sql过来,一下子蒙蔽了,后来在其讲解的条件下懂了,本着好东西不私藏道理在这里分享出来。BEGIN /*下面这三行就是相当于...原创 2019-02-21 13:37:17 · 18304 阅读 · 0 评论 -
org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext 87
全部异常如下:2019-01-23 09:02:01.534 [restartedMain] WARN org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext 87 -| Exception encountered during context init...原创 2019-01-23 13:05:42 · 29286 阅读 · 0 评论 -
mysql判断表是否存在然后批量删除
1、在网上找了许久都没有找到判断表是否存在,然后模糊删除的。但是最后找到了一个曲线救国的方法。需求:删除表中后缀是 _待删除 的表1、第一步,找到所有的这样的表,并且拼装好删除表的sqlSelect CONCAT( 'DROP TABLE IF EXISTS ', table_name, ';' ) FROM information_schema.tables Where ...原创 2019-03-04 18:29:57 · 1009 阅读 · 0 评论 -
mybatisPlus之getById和selectById查询不出结果
最终导致查询不出结果的原因可能有多种,我这里说出我遇到的一种原因,希望对你有帮助。 我是因为在数据库添加了一个字段,没有及时地更新mapper.xml中的resultMap导致的大晚上的写代码,脑子不太好使。...原创 2019-04-26 03:36:36 · 10657 阅读 · 3 评论 -
阿里云Linux下安装MySql,并修改mysql默认端口【CentOs7.3】
说明:本博客指导安装的并不是MySql而是mariaDB。之所以没有安装mysql,是因为在安装mysql5.6过程中出现了很多问题,导致一直无法安装成功。mariaDB对于一般的用户来说和mysql的区别不大,至于他们之间细微的差别请自行百度。mariaDB一样支持navicat等工具的链接,使用和mysql无异。一、下面就开始指导安装。1、先切换到根目录下(命令 cd /),依次执行下面代...原创 2019-04-22 22:24:01 · 762 阅读 · 0 评论