Mysql
文章平均质量分 56
好大的月亮
一只奔跑的菜鸡
展开
-
mysql逗号分隔字段拆成行简述
mysql逗号分隔字段拆成行简述原创 2024-03-15 11:14:24 · 669 阅读 · 0 评论 -
canal监听binlog记录业务数据的变更;canalAdmin对instance做web配置
canal监听binlog记录业务数据的变更;canalAdmin对instance做web配置原创 2024-02-16 15:55:56 · 670 阅读 · 0 评论 -
mysql按周统计数据简述
mysql按周统计数据简述原创 2024-02-03 21:40:50 · 1575 阅读 · 0 评论 -
mysql临时表简述
业务中经常会对一些表进行聚合组装信息,然后筛选,有些表比较数据量大的时候,会对拖慢查询;常用的mybatis的分页查询,在查询时会先count一下所有数据,然后再limit分页,即使分页也会有深度分页问题;在分页的时候一些大表的子查询都是重复的,而且每次的count和查询对大表实际进行了2次查询,可能mysql的中会有缓存,但是非常影响查询速度;在不使用其他中间件的情况下,优化sql,有好几种方案;临时表就是其中一种;平时我们在join子查询时,mysql也会生成临时表,只不过是隐式的;原创 2024-01-24 22:13:52 · 495 阅读 · 0 评论 -
mysql间隙锁demo分析
mysql间隙锁demo分析原创 2023-12-31 17:09:10 · 601 阅读 · 0 评论 -
mysql反斜杠多次转义简述
mysql反斜杠多次转义简述原创 2023-10-19 18:32:37 · 528 阅读 · 0 评论 -
mysql8动态子查询;LATERAL
mysql8动态子查询;LATERAL原创 2023-10-12 12:14:00 · 398 阅读 · 0 评论 -
datax同步数据简介;datax_web管理使用
datax同步数据简介原创 2023-10-10 15:47:12 · 293 阅读 · 0 评论 -
mysql死锁;锁表排查
mysql长时间锁排查原创 2023-08-11 09:37:10 · 805 阅读 · 0 评论 -
mysql8.0窗口函数排序row_number;rank;dense_rank
mysql8.0窗口函数排序row_number;rank;dense_rank原创 2023-07-21 18:20:30 · 352 阅读 · 0 评论 -
docker-compose通过volume恢复mysql数据
通过volume恢复mysql数据原创 2023-06-06 10:39:59 · 933 阅读 · 0 评论 -
mybatis批量插入更新操作;查询一对多;多对一
mybatis批量插入更新操作;一对多;多对一原创 2021-11-24 17:08:11 · 1378 阅读 · 0 评论 -
mysql使用正则取2个字段的交集
mysql使用正则取2个字段的交集原创 2022-12-06 12:27:17 · 1272 阅读 · 0 评论 -
mysql5.7使用变量进行分组排名并筛选
mysql5.7分组排名原创 2022-08-29 16:33:53 · 1207 阅读 · 0 评论 -
对mysql的mvcc多版本控制的通俗理解
mysql的mvcc的通俗理解原创 2022-08-12 14:40:55 · 224 阅读 · 0 评论 -
mysql的缓存页对LRU的改进;预读机制;及对应的调优
mysql对lru的改进原创 2022-08-12 11:11:27 · 643 阅读 · 0 评论 -
mysql查询连续天数数据
连续天数查询原创 2022-07-21 11:21:14 · 1920 阅读 · 0 评论 -
mysql截取子串后更新
先上几个基本函数locate 显示子串的位置返回子串在串中第n位置开始第一次出现的位置, 其中n可以省略,n默认为1,位置的初始值从1开始;若子串不在串中,返回值为0;locate(substr, str, [n])substring 截取字符串从字符串的第pos个字符位置开始取,长度为len, 其中len可以省略,若len省略,则取后面所有子串;另外,len为正,表示正向取,len为负,表示倒数开始取;substring(str, pos, [len])substring_index原创 2022-04-26 16:30:21 · 526 阅读 · 0 评论 -
jpa一对多OneToMany关联查询;debug下lazy失效原因
jpa一对多实体类关联查询package com.xx.xx.settings.domain;import lombok.*;import lombok.experimental.Accessors;import javax.persistence.*;import java.io.Serializable;import java.util.ArrayList;import java.util.Date;import java.util.List;@Table(name = "con原创 2022-01-06 09:46:32 · 1537 阅读 · 0 评论 -
mysql多个事务同时执行死锁(间隙锁)
假设场景mq消息广播,消费者同时插入同一条数据,某一个事务死锁。开始分析原则1:加锁的基本单位是next-key lock(next-key lock是前开后闭区间)。原则2:查找过程中访问到的对象才会加锁。优化1:索引上的等值查询,给唯一索引加锁的时候,next-key lock退化为行锁。优化2:索引上的等值查询,向右遍历时且最后一个值不满足等值条件的时候,next-key lock退化为间隙锁。demoCREATE TABLE `t` ( `id` int(11) NOT NULL原创 2021-11-24 15:55:05 · 1689 阅读 · 0 评论 -
mysql事务相关的redoLog、undoLog
数据增删改的一个大致过程如下先从索引中找到数据所在的表空间ID以及在表空间中的数据页的页号然后通过表空间ID+页号作为Key,去缓存页哈希表中查找BufferPool是否已经加载了这个缓存页。如果已经加载了缓存页,就直接读取这个缓存页。如果没有这个缓存页,就需要从磁盘表空间中加载数据页到内存,此时需要从Free链表获取一个空闲页加入LRU链表中,加载的数据页就会放到这个空闲的缓存页中。接着在对应的缓存页中执行增删改操作,被修改过的缓存页就变成了脏页,会加入Flush链表中。最后,后台线程会在一原创 2021-10-07 00:40:27 · 295 阅读 · 0 评论 -
mysql的RR下当前读和快照读不一致的情况;记录锁和间隙锁;幻读解释
先上幻读的解释幻读,并不是说两次读取获取的结果集不同,幻读侧重的方面是某一次的 select 操作得到的结果所表征的数据状态无法支撑后续的业务操作。更为具体一些:select 某记录是否存在,不存在,准备插入此记录,但执行 insert 时发现此记录已存在,无法插入,此时就发生了幻读。当前读和快照读不一致的情况RR级别下,通过MVCC保证同一事务内两次快照读不出现幻读,通过间隙锁保证同一事务内两次当前读不出现幻读。但是如果是你先快照度一次,再当前读一次,如果两次读期间别的事务插入了数据并提交了的话,两原创 2021-10-06 23:44:38 · 727 阅读 · 0 评论 -
mysql的MVCC
概念MVCC,全称 Multi-Version Concurrency Control ,即多版本并发控制。MVCC 是一种并发控制的方法,一般在数据库管理系统中,实现对数据库的并发访问,在编程语言中实现事务内存。当前读和快照读当前读像 select lock in share mode (共享锁), select for update; update; insert; delete (排他锁)这些操作都是一种当前读,为什么叫当前读?就是它读取的是记录的最新版本,读取时还要保证其他并发事务不能修转载 2021-10-06 23:40:23 · 226 阅读 · 0 评论 -
sql操作索引/字段/修改备注
alter table shop_user add column shop_id bigint(64) COMMENT '门店id';#特殊情况:用户是A门店的管理员,B门店的普通用户,手机号会重复drop index mobile on shop_user;create unique index shop_id_mobile on shop_user(shop_id,mobile);#之前的老用户都给管理员alter table shop_user add column role int(11)原创 2021-07-10 13:08:20 · 585 阅读 · 0 评论 -
mybatisPlus入门应用Wrapper查询/驼峰下划线转换/sql执行日志,分页查询,通用IService增删改查
mybatisplus原创 2021-07-10 12:55:48 · 8845 阅读 · 0 评论 -
使用sql语句在mysql的表中随机获取数据,以及改进方案
rand()获取随机数据问题有时候会有这样的业务场景,随机获取几条数据,网上一搜有好多使用select * from xxx order by rand() limit x在数据量比较小的时候这个是没问题的,但是一旦数据量上来就会非常的慢,我自己本地搞了900w+的数据,随机取6条就需要大概20s+。原因是扫描了全表,这还了得。。。解决方案方法1:mysql里的id一般都是聚簇索引,这个时候我们可以利用上id来做操作建议查询10次以下用这个语句多次查询比一次rand()效率高的多,每原创 2021-07-07 11:43:49 · 1331 阅读 · 0 评论 -
mysql使用一张表的数据更新另一张表update
方法1demo是将class_name赋值为 companyUPDATE work w SET w.class_name = ( SELECT a.company FROM ( SELECT * FROM work ) a WHERE a.id = w.id )方法2update table_1 t1,table_2 t2 set t1.column = t2.column where t1.id = t2.pid;转载 2021-06-29 22:36:26 · 8249 阅读 · 0 评论 -
jpa在save失败后service端catch不到异常原因(Hibernate的一级缓存)
jpa的save是先保存到缓存的,没有立即插入到数据库需要调用flush方法,强制把数据刷到数据库原创 2021-06-21 08:36:59 · 1828 阅读 · 2 评论 -
mysql表的enum类型字段
enum在java中是枚举类型,在mysql也是一样的。`gender` enum('男','女','保密') DEFAULT NULL,不过在mysql5.7中插入没有在enum中定义的值的时候会报错,类似下面的报错Data truncated for column 'gender' at row 1但是使用 ignore 后插入不在范围内的数据,数据能被强制插入,但是是空值。INSERT ignore INTO user (sex) VALUES (5);在mysql5.5中是不会报错原创 2021-06-17 09:00:33 · 801 阅读 · 0 评论 -
kettle在不同类型数据库之间进行数据传输并对字段进行映射
官方文档https://help.pentaho.com/Documentation/7.1/0J0/0C0/020下载地址https://community.hitachivantara.com/s/article/data-integration-kettle下载完之后双击运行启动成功原创 2021-05-25 09:12:35 · 2605 阅读 · 0 评论 -
hikari数据库连接池
mysql原创 2021-05-10 23:59:13 · 7184 阅读 · 1 评论 -
SQL JOIN 中 on 与 where 的区别
常用的joinleft join : 左连接,返回左表中所有的记录以及右表中连接字段相等的记录。right join : 右连接,返回右表中所有的记录以及左表中连接字段相等的记录。inner join : 内连接,又叫等值连接,只返回两个表中连接字段相等的行。full join : 外连接,返回两个表中的行:left join + right join。cross join : 结果是笛卡尔积,就是第一个表的行数乘以第二个表的行数。查询demo先复习下,sql的执行顺序from ..原创 2021-05-06 12:01:35 · 440 阅读 · 0 评论 -
mysql开启定时任务(事件)event_scheduler以及skip-grant-tables的影响
首先在sql中查询计划事件的状态:SHOW VARIABLES LIKE 'event_scheduler'如果返回的是off表示当前是关闭状态,如果是on当前已经开启了计划任务。在mysql程序的目录下找到my.ini文件,添加一个项:event_scheduler = 1保存后重启mysql服务即可,重启服务可以在服务管理里面找到不过当配置skip-grant-tables时event_scheduler就不会生效了skip-grant-tables顾名思义,就是在启动mysql时不启动原创 2021-04-06 14:29:00 · 527 阅读 · 0 评论 -
MySQL中IS NULL,IS NOT NULL,!=,in大量id是否走索引的情况
不知道从什么时候开始,网上流传着这么一个说法:MySQL的WHERE子句中包含 IS NULL、IS NOT NULL、!= 这些条件时便不能使用索引查询,只能使用全表扫描。CREATE TABLE s1 ( id INT NOT NULL AUTO_INCREMENT, key1 VARCHAR(100), key2 VARCHAR(100), key3 VARCHAR(100), key_part1 VARCHAR(100), key_part2 VA原创 2021-03-31 00:56:10 · 453 阅读 · 0 评论 -
spring JDBC template批量插入/修改/删除
template方法总览JdbcTemplate主要提供以下五类方法:execute方法:可以用于执行任何SQL语句,一般用于执行DDL语句;update方法及batchUpdate方法:update方法用于执行新增、修改、删除等语句;batchUpdate方法用于执行批处理相关语句;query方法及queryForXXX方法:用于执行查询相关语句;call方法:用于执行存储过程、函数相关语句。batchUpdate()批量插入、更新和删除方法增删改查中其实除了查其他都属于对数据库的更新原创 2021-03-30 19:58:12 · 1343 阅读 · 0 评论 -
SQL ORDER BY多列排序,分组排序,sql执行顺序
直接上demo,表结构如下#默认按照a列升序排序SELECT * FROM test ORDER BY a;#默认按照a列升序排序,如果a列值相同则接着按照b列排序,如果b列值都不同,那么则与`ORDER BY a`结果相同SELECT * FROM test ORDER BY a,b;#默认按照a列升序排序,如果a列值相同则接着按照b列排序,如果a,b列都相同则按照c列升序排序;如果a,b,c列值都各不相同则与`ORDER BY a`结果相同SELECT * FROM test ORDER原创 2021-03-24 14:36:55 · 1247 阅读 · 0 评论 -
mysql DENSE_RANK函数在group by之后获取每组排名,分组排名;RANK/DENSE_RANK/ROW_NUMBER(数据行号)
业务中经常需要对数据进行排名demo如果两个分数相同,则两个分数排名(Rank)相同。请注意,平分后的下一个名次应该是下一个连续的整数值。换句话说,名次之间不应该有“间隔”。±—±------+| Id | Score |±—±------+| 1 | 3.50 || 2 | 3.65 || 3 | 4.00 || 4 | 3.85 || 5 | 4.00 || 6 | 3.65 |±—±------+例如,根据上述给定的 Scores 表,你的查询应该返回原创 2021-03-22 18:37:48 · 1715 阅读 · 3 评论 -
MySQL CAST与CONVERT函数用法,产生另一个类型的值如字符串转int
MySQL 的CAST()和CONVERT()函数可用来获取一个类型的值,并产生另一个类型的值。两者具体的语法如下:CAST(value as type);CONVERT(value, type);可以转换的类型是有限制的。这个类型可以是以下值其中的一个:二进制,同带binary前缀的效果 : BINARY字符型,可带参数 : CHAR()日期 : DATE时间: TIME日期时间型 : DATETIME浮点数 : DECIMAL整数 : SIGNED无符号整数 : UNSIGNE原创 2021-03-22 18:37:36 · 408 阅读 · 0 评论 -
mysql多列in的使用
平时业务中多组条件两列同时满足的sql,可能大家会这样写表结构:id a b1 1 22 3 43 5 64 7 85 1 46 9 10sql:select a,b from test where (a = 1 and b = 2) or (a = 3 and b = 4) or (a = 5 and b = 6) or (a = 7 and b = 8);当条件一多就会显的sql特别乱,其实mysql的in就可以解决这种情况select a,b原创 2021-03-22 15:34:33 · 6618 阅读 · 0 评论 -
mysql中not in 和not exist的区别以及使用场景
not in 和not exist平时业务中免不了要判断2张表join之后其中一张A表中不存在B表中的数据举个例子:某网站包含两个表,Customers 表和 Orders 表。编写一个 SQL 查询,找出所有从不订购任何东西的客户。Customers 表:±—±------+| Id | Name |±—±------+| 1 | Joe || 2 | Henry || 3 | Sam || 4 | Max |±—±------+Orders 表:±—±-原创 2021-03-22 14:16:44 · 10355 阅读 · 0 评论