mysql
文章平均质量分 82
mysql
秃了也弱了。
即使没有万全准备,也要勇敢迈出第一步。无论远方的风雨有多大、路有多难走。风里雨里陪伴你们,赠人玫瑰,手有余香。在技术领域,我会一如既往的坚持下去。
展开
-
MySQL8.0新特性:函数索引,使用函数也不会导致索引失效~
之前我们知道,如果在查询中加入了函数,索引不生效,所以MySQL 8引入了函数索引,MySQL 8.0.13开始支持在索引中使用函数(表达式)的值。函数索引基于虚拟列功能实现,在MySQL中相当于新增了一个列,这个列会根据你的函数来进行计算结果,然后使用函数索引的时候就会用这个计算后的列作为索引。当必须要使用函数时,通过创建函数索引,也可以极大的提高查询效率。原创 2023-12-08 08:36:38 · 1397 阅读 · 0 评论 -
MySQL窗口函数——让查询变得更简单
MySQL从8.0开始支持窗口函数,有的也叫分析函数(处理相对复杂的报表统计分析场景),这个功能在大多商业数据库和部分开源数据库中早已支持。窗口的意思是将数据进行分组,每个分组即是一个窗口,这和使用聚合函数时的group by分组类似,但与聚合函数不同的地方是:聚合函数(例如:sum/avg/min/max)会针对每个分组(窗口)聚合出一个结果(每一组返回一个结果窗口函数会对每一条数据进行计算,并不会使返回的数据变少(每一行返回一个结果。原创 2023-11-10 15:21:25 · 461 阅读 · 0 评论 -
MySql表自修改报错:You can‘t specify target table ‘student‘ for update in FROM clause
此时,一样的报错:> 1093 - You can’t specify target table ‘student’ for update in FROM clause。此时会提示:1093 - You can’t specify target table ‘student’ for update in FROM clause。使用update join语法,可以很轻松的实现跨表的数据修改。,大致的意思就是:不能在同一张表中先select再update。原创 2023-11-01 11:43:32 · 781 阅读 · 0 评论 -
使用sysbench为mysql全方位压测,单台mysql服务器支持多少并发?
这个压测结果会根据每个人的机器的性能不同有很大的差距,你要是机器性能特别高,那你可以开很多的并发线程去压测,比如100个线程,此时可能会发现数据库每秒的TPS有上千个,如果你的机器性能很低,可能压测出来你的TPS才二三十个,QPS才几百个,这都是有可能的。对于内存而言,同样是要在压测的过程中紧密的观察,一般来说,如果内存的使用率在80%以内,基本都还能接受,在正常范围内,但是如果你的机器的内存使用率到了70%~80%了,就说明有点危险了,此时就不要继续增加压测的线程数量和QPS了,差不多就可以了。原创 2023-10-18 13:54:54 · 2399 阅读 · 0 评论 -
mysql处理json格式的字段,一文搞懂mysql解析json数据
JSON 数据类型是 MySQL 5.7.8 开始支持的。在此之前,只能通过字符类型(CHAR,VARCHAR 或 TEXT )来保存 JSON 文档。MySQL 8.0版本中增加了对JSON类型的索引支持。可以使用CREATE INDEX语句创建JSON类型的索引,提高JSON类型数据的查询效率。存储JSON文档所需的空间与存储LONGBLOB或LONGTEXT所需的空间大致相同。在MySQL 8.0.13之前,JSON列不能有非空的默认值。JSON 类型比较适合存储一些列不固定、修改较少原创 2023-08-25 11:24:12 · 19667 阅读 · 6 评论 -
MySQL锁汇总,一文搞懂InnoDB所有的锁
锁住的不是record一行记录,也不是column字段,那么InnoDB的行锁锁住的到底是什么呢?在上面三个案例中,我们分析一下它们的差异在哪里,这三张表结构的什么区别导致了加锁行为的差异?答案就是索引。InnoDB的行锁,就是通过锁住索引来实现的。我们准备一张测试表t2,表中有一个主键索引,有四条数据,主键id分别是1、4、7、10。因为我们用主键索引加锁,我们这里的划分标准就是主键索引的值。这些数据库里面存在的主键值,我们把它叫做Record,记录,那么我们这里就有4个Record。原创 2023-07-20 22:07:35 · 2096 阅读 · 0 评论 -
MVCC原理深度解析,InnoDB使用MVCC解决读一致性问题,MySQL读一致性解决方案
MySQL事务隔离级别详解事务隔离级别脏读不可重复读幻读未提交读(Read Uncommitted)可能可能可能已提交读(Read Committed)不可能可能可能可重复读(Repeatable Read)不可能不可能对InnoDB不可能串行化(Serializable)不可能不可能不可能InnoDB支持的四个隔离级别和SQL92定义的完全一致,隔离级别越高,事务的并发度就越低。唯一的区别就在于,InnoDB在RR的级别就解决了幻读的问题。原创 2023-07-18 14:37:12 · 460 阅读 · 0 评论 -
MySQL索引使用原则,什么是覆盖索引、索引下堆、离散度……这些概念你弄明白了吗
非主键索引,我们先通过索引找到主键索引的键值,再通过主键值查出索引里面没有的数据,它比基于主键索引的查询多扫描了一棵索引树,这个过程就叫回表。select * from user where name = '张三';在二级索引里面,不管是单列索引还是联合索引,如果select的数据列只用从索引中就能够取得,不必从数据区中读取,这时候使用的索引就叫做覆盖索引,这样就避免了回表。原创 2023-07-17 08:21:09 · 766 阅读 · 0 评论 -
MySQL为什么要使用B+树做索引?MySQL索引存储模型推演,B+树在MySQL的落地形式
user_innodb这张表里有4个字段,id,name,gender,phone。select * from user_innodb where name = '张三';如果name字段上有索引呢?-- name字段创建索引 ALTER TABLE user_innodb DROP INDEX idx_user_name;我们再来执行一下select语句。我们会发现,有索引的查询和没有索引的查询相比,效率竟相差几十倍。索引到底是什么呢?为什么可以对我们的查询产生这么大的影响?原创 2023-07-13 17:51:21 · 1578 阅读 · 0 评论 -
mysql一条更新语句是如何被执行的——带你了解mysql更新语句执行内部顺序
mysql一条查询语句是如何被执行的——带你了解mysql查询语句执行内部顺序在数据库里面,update操作其实包括了更新、插入和删除。MyBatis源码中,Executor里面也只有doQuery和doUpdate方法,没有doDelete和doInsert方法。更新流程和查询流程有什么不同呢?基本流程其实是一致的,也就是说,它也要经过解析器、优化器的处理,最后交给执行器。区别就在于拿到符合条件的数据之后的操作。原创 2023-07-12 21:28:56 · 468 阅读 · 0 评论 -
navicat下对mysql创建索引导致死锁,数据库崩溃,完美解决方案
DDL语句,就是对数据库对象(数据库、表、列、索引等)进行创建、删除、修改等。之前分享过一篇mysql创建索引导致死锁,数据库崩溃,mysql的表级锁之【元数据锁(meta data lock,MDL)】全解通过上一篇文章我们了解到,MySQL有一种表锁叫做元数据锁(meta data lock,MDL)元数据锁,执行DDL时会检查元数据锁并尝试获取。原创 2023-03-10 17:16:11 · 5023 阅读 · 0 评论 -
MySQL在RR级别下到底会不会造成幻读【转载】
说到快照读,就得先说一下快照,而说到快照,就得说说MVCC。快照是属于MVCC中的一个概念。在RR级别下,MySQL通过MVCC的技术会给每一个事务在启动的时候,创建一个一致性的快照视图,这个快照中的所有数据内容就是这个事务在启动时刻的生成的,后续数据库中的数据再怎么变化,这个快照的数据内容都不受它们的影响。而这个快照一直会伴随着整个事务的生命周期。在这个事务运行过程中的,所有的普通查询都会从这个快照中去获取数据,事务中的这些普通的查询就属于快照读。转载 2022-12-16 11:34:53 · 376 阅读 · 0 评论 -
mysql数据如何恢复到任意时间节点?mysql数据恢复,mysql数据备份
作为互联网开发人员来说,数据安全性一直排在第一位的重中之重。mysql作为关系型数据库的一个巨头,其备份与恢复更是大家所关心的。今天就详细聊聊,mysql如何备份,以及被“删库跑路”之后如何恢复。发生删库跑路,不要慌,还是可以恢复数据的。正常来说全量备份+binlog就可以恢复所有的数据,但是数据安全性可并不止这些。“不要把所有的鸡蛋放在同一个篮子中”,无论是全量备份还是 Binlog,都不要和数据库存放在同一个服务器上。最好能做到不同机房,甚至不同城市,离得越远越好。原创 2022-12-12 20:56:22 · 3615 阅读 · 2 评论 -
MySql按条件插入数据,MySQL插入语句写where条件,MySQL使用INSERT IGNORE INTO,MySQL在插入时做幂等
使用MySQL的删、改、查功能时,我们都可以根据where条件来对指定数据进行操作。插入语句如何通过where条件,来判断是否允许插入呢?此时表里有三条数据了:上面sql执行结果:上面sql执行结果:我们使用insert into语句做了个取巧,我们都知道insert into语句有以下用法:我们这里使用第三种方式,自定义了一个临时表,临时表的数据就是我们要insert的数据,此时的临时表就可以写where条件了!原创 2022-12-08 10:54:09 · 7530 阅读 · 2 评论 -
mysql创建索引导致死锁,数据库崩溃,mysql的表级锁之【元数据锁(meta data lock,MDL)】全解
COMMIT;# 如果user1在一个表上有一个活动的事务,然后user2删除这个表,那么user1会提交,那么在binlog中我们有如下内容(binlog记录的操作顺序顺序): 1. DROP TABLE t;2. BEGIN;COMMIT;很显然mysql执行时会先删除表t,然后执行insert 会报1032 error。再举一个简单的例子,如果你在查询一个表的过程中,另外一个session对该表删除了一个列,那前面的查询到底该显示什么呢?原创 2022-11-11 22:33:06 · 5880 阅读 · 1 评论 -
使用canal订阅mysql的binlog,springboot使用canal订阅mysql的binlog
使用canal订阅mysql的binlog原创 2022-10-15 12:01:21 · 972 阅读 · 0 评论 -
mysql一条查询语句是如何被执行的——带你了解mysql查询语句执行内部顺序
日常开发中,执行以上的SQL语句时,所呈现给我们的是输入一条SQL,输出一行结果,却不知道这条语句在 MySQL 内部的执行过程。今天咱们就捋一捋一条SQL语句在MySql中是如何执行的。原创 2022-09-02 22:30:00 · 1411 阅读 · 0 评论 -
mysql递增统计数量,mysql实现自增序列,教你如何实现线程安全的mysql自增统计
oracle是有自增序列的机制的,而mysql并没有。那么mysql想要实现字段的自增从而统计数量,或者实现一个自增序列需要怎么做呢?1.创建序列表。原创 2022-08-31 18:15:04 · 2578 阅读 · 2 评论 -
mysql搭建主从同步-手把手使用docker搭建
centos7安装docker-简单而详细无坑docker安装mysql-简单无坑。原创 2022-07-21 10:15:16 · 363 阅读 · 0 评论 -
mysql用in走索引吗?(mysql-8.0.21、5.5.40是不一样的)实践出真知——看完就要注意in的用法了
注!以下都是在mysql-8.0.21版本下进行测试的。执行计划还不熟悉的小伙伴请先学习执行计划:MySQL高级-索引是个什么东西?explain到底怎么用-MySQL查询优化大全预先在表中随便插入12条数据。我们发现type是const,相当于mysql对in做了优化,相当于 id = 1了。在这里,in了三个数据,mysql认为是一个范围查询,同样也会使用索引。数据表中总共有12条数据,in的条件有了11条,mysql会做一下优化,不使用索引,会走全表扫描。注:实际生产环境数据量并不会仅原创 2022-07-13 10:15:45 · 3340 阅读 · 0 评论 -
mysql伪列的使用,mysql伪列的妙用,mysql获取近几天的日期用来连表查询
我们都知道oracle有个rownum字段,可以记录行号,mysql是没有这个字段来记录行号的。使用mysql想要知道行号怎么做?可以看到,从-1开始累增1:获取近几天的日期(用于关联查询)1、获取四行数据2、获取16行数据3、获取64行数据我们看到,是相乘的关系,想要不通过表获取单纯的行数,是可以用union来实现的。mysql的伪列,在用到递增连表查询时,是非常方便的。灵活运用伪列,可以解决并实现很多非常巧妙的场景。...原创 2022-07-11 17:07:00 · 2026 阅读 · 0 评论 -
docker安装mysql-简单无坑
1.切换root用户2.下载镜像文件3.创建实例并启动出现一长串的id即表示mysql启动成功【端口映射与文件挂载】参数说明-p 3306:3306:将容器的 3306 端口映射到主机的 3306 端口-name:容器名称-v /mydata/mysql/conf:/etc/mysql:将配置文件夹挂载到主机-v /mydata/mysql/log:/var/log/mysql:将日志文件夹挂载到主机-v /mydata/mysql/data:/var/lib/mysql/:将配置文件夹挂载原创 2022-06-24 11:50:29 · 1012 阅读 · 6 评论 -
mysql以逗号分隔的字段作为查询条件怎么查——find_in_set()函数
使用mysql时,有可能一个字段代表一个集合,如果将这个集合单独抽成一张表又不值当的,这个时候我们存储时,可以选择用逗号将数据分隔开(只能用英文的逗号),如图所示:做查询时怎么查呢?假如说给一个数据作为查询条件,判断该字段是否存在,应该怎么查呢?使用find_in_set()函数轻松实现,将sign字段中含有’唱歌’属性的数据查询出来,而不是用like。假如说想要查询多个条件,比如说既符合 唱歌 、 又符合 跳舞 的,就可以这样写:聚合查询count总数怎么计算总数呢?原始字段内容的长度 -原创 2022-06-22 17:39:18 · 4647 阅读 · 0 评论 -
使用otter实现数据同步——mysql、oracle的数据同步利器
导历史表还需要程序代码实现吗? 还在⽤mysql的主从复制吗? Otter都能为你解决。典型的场景是账户信息表和账户交易明细表,更新账户余额后需要登记⼀条账户明细,并且保证在⼀个事务⾥,⽤户可以通过交易明细表查看交易记录,但是交易明细表的数据量是逐步递增的,⽤户量多的系统,⼏个⽉下来的数据超过千万了,表数据量⼀多就导致查询和 插⼊变慢,⽽⼀开始就对账户明细做分表处理就难于保证强⼀致性事务,通过otter可以将记录同步导历史表,并且进⾏分表处理,⽤户往 年的交易记录就可以查询历史表了,⽽原交易明细表就可以删除原创 2022-06-13 20:00:00 · 3340 阅读 · 0 评论 -
mysql执行update、insert、delete卡住——记一次开发时出现的意外
考虑是否锁表考虑代码原因spring编程式事务先来学习一下spring的事务,spring有两种事务的写法,一种是声明式事务,就是使用@Transactional注解开启。另一种开启事务的方式就是编程式事务。以上就是编程式事务的写法。而我们代码中,dosomthing中,这样写的:并没有将事务回滚或者提交!于是造成了问题。写在最后spring编程式事务其实挺坑的,能不用还是别用了。。。但是,某些场景下声明式事务没法使用的时候,还是得用到编程式事务的。所以,使用编程式事务的时候原创 2022-06-07 15:17:49 · 2728 阅读 · 0 评论 -
记一次意外事故-mysql批量insert时执行delete和select for update造成死锁
文章目录写在前面问题描述查阅资料举一反三-select for update造成死锁解决方案写在前面开发过程中遇到这样一个问题,mysql在对一张表执行批量insert的时候,这个时候执行delete,竟然导致了锁表。这让我感觉大开了眼界,在我的认知中,insert的时候和delete的时候,不都应该是锁整表吗?就算是delete时的条件走了索引,那也应该等insert执行完毕之后,再执行delete呀,为什么会有死锁产生呢?问题描述在执行类似以下sql的过程中:insert table(id,原创 2022-05-25 21:38:50 · 3516 阅读 · 0 评论 -
mysql查询每一类的第一条数据(完美解决子查询order by失效的场景)
环境MySQL:5.7Java:1.8SQL语句的写法:select * from (select distinct(a.id) tid, a.* from template_detail a where a.template_id in (3, 4) order by a.id desc) ttgroup by tt.template_id;思路:先进行排序,然后再进行分组,获取每组的第一条。Q: 为什么要写...转载 2022-05-06 22:00:00 · 3108 阅读 · 0 评论 -
mysql大批量更新数据,update批量更新的方式
大批量更新数据mysql批量更新的四种方法_tyilack_小小黑的博客-CSDN博客_php 批量更新转载 2022-04-28 05:15:00 · 18895 阅读 · 1 评论 -
mysql实现upsert(没有就新增,有就修改)
目录写在前面建表准备upsert语句总结写在前面当实际工作中遇到这么一种需求:数据库没有这条数据,我需要新增,有这条数据我需要修改,或者某个字段的数量进行调整。那么我们就可以考虑使用mysql的upsert语句了。建表准备CREATE TABLE `student` ( `id` varchar(50) NOT NULL DEFAULT '', `name` varchar(50) DEFAULT NULL, `age` int(11) DEFAULT.原创 2022-04-14 21:45:00 · 12265 阅读 · 9 评论 -
mysql死锁场景汇总整理
目录简述行锁导致死锁gap lock/next keys lock导致死锁index merge导致死锁唯一索引冲突导致死锁总结简述本文死锁场景皆为工作中遇到(或同事遇到)并解决的死锁场景,写这篇文章的目的是整理和分享,欢迎指正和补充,本文死锁场景包括:行锁导致死锁 gap lock/next keys lock导致死锁 index merge 导致死锁 唯一索引冲突导致死锁注:以下场景隔离级别均为默认的Repeatable Read;行锁导致死锁前.转载 2021-03-18 16:24:06 · 3527 阅读 · 3 评论 -
mysql的show profile使用总结
目录前言:1.分析步骤2.总结前言:Show Profile是mysql提供的可以用来分析当前会话中sql语句执行的资源消耗情况的工具,可用于sql调优的测量。默认情况下处于关闭状态,并保存最近15次的运行结果。1.分析步骤#1.开启Show Profile功能,默认该功能是关闭的,使用前需开启。#2.根据MySQL高级知识(十)——批量插入数据脚本中的数据脚本向tb_emp_bigdata表中插入50w条数据。然后执行如下查询语句:select *from tb_转载 2021-03-09 17:33:19 · 2001 阅读 · 0 评论 -
order by、group by也会使用索引?使用这俩关键字的时候索引什么时间会失效
目录写在前面初始化语句orderby索引分析总结groupby写在前面 我们都知道,索引可以提高查询和排序的速度。 所以,orderby做排序的时候,显然是可以使用索引的。 groupby做分组也会用到索引吗?关于查询时索引失效场景的验证,请参考这篇文章:MySQL索引失效的场景,什么情况下会造成MySQL索引失效初始化语句CREATE TABLE `student` ( `id` int(11) NOT NULL AUTO_...原创 2021-03-09 17:26:54 · 10254 阅读 · 2 评论 -
mysql什么时候用in,什么时候用exists
写在前面网上看帖子的时候,经常会看到说尽量用exists,少用in。那么问题来了,是所有场景下都尽量用exists吗,还是具体场景具体分析。给你答案mysql做子查询的时候,永远记得要小表驱动大表。inselect * from A where id in (select id from B);相当于先循环B,再循环A。B表驱动A表。也就是当B表数据少于A表时,用in最佳。existsselect * from A whereexists(select 1 ...原创 2021-03-09 16:40:54 · 3729 阅读 · 13 评论 -
学会用各种方式备份MySQL数据库
前言 为什么需要备份数据? 数据的备份类型 MySQL备份数据的方式 备份需要考虑的问题 设计合适的备份策略 实战演练 使用cp进行备份 使用mysqldump+复制BINARY LOG备份 使用lvm2快照备份数据 使用Xtrabackup备份 总结 前言我们试着想一想, 在生产环境中什么最重要?如果我们服务器的硬件坏了可以维修或者换新, 软件问题可以修...转载 2021-03-09 16:04:39 · 1888 阅读 · 0 评论 -
MySQL事务隔离级别详解
目录写在前面先贴出一张汇总图然后开始解释一些名词:好了,洗脑部分结束了,开始认真的分析四种隔离级别到底是什么意思读未提交(Read uncommitted)读已提交(Read committed)可重复读(Repeatable read)串行化(Serializable )总结:写在前面 相信工作中使用数据库的小伙伴,经常会听到大佬们提起“数据库的事务隔离级别”。 甚至在面试中也经常会被提问到,每次问到这个问题,虽然大体能够明白是什么意思,但是还是...原创 2021-02-23 17:04:54 · 2018 阅读 · 0 评论 -
惊呆!学习MySQL真的这一篇就够了!太全了
这是我见过学习MySQL最全的一篇文章!https://caochenlei.blog.csdn.net/article/details/107640904目录 第一章 数据库概述 1.1、数据库的好处 1.2、数据库的常见概念 1.3、数据库的存储特点 1.4、数据库的常见分类 1.5、SQL语言的分类 第二章 MySQL概述 2.1、MySQL的背景 2.2、MySQL的优点 2.3、MySQL的安装 2.4、MySQ转载 2021-02-23 10:22:03 · 646 阅读 · 0 评论 -
关于mysql使用!=或者<>会导致索引失效问题的验证
目录写在前面5.0版本,!=、<>都会造成索引失效因为8.0的我这边有乱码,所以使用数字作为查询条件,在这里5.0的也做个对比8.0版本的mysql,的确是!=、<>都走索引,其中!=、<>表示范围查询。总结写在前面在我的这篇文章中:MySQL索引失效的场景,什么情况下会造成MySQL索引失效,我提到!=、<>在8.0的mysql可能也会走索引,不会造成索引失效。在这里我做一下验证。5.0版本,!=、<>都会造成原创 2021-02-20 14:49:35 · 5883 阅读 · 1 评论 -
MySQL索引失效的场景,什么情况下会造成MySQL索引失效
目录一、准备工作,准备sql二、索引是什么、使用explain关键字来解析sql使用索引情况三、索引的使用与失效场景1.使用全部复合索引(索引正常使用)2.最佳左前缀法则3.在索引列上做任何操作(计算、函数、自动或手动类型转换),会导致索引失效而转向全表扫描。4.不能使用索引中范围条件右边的列。(范围条件之后的索引全失效,但是范围条件之前的和范围条件的还是用到索引的。)5.尽量使用覆合索引(只访问索引的查询(索引列和查询列一致)),减少select *。6.mysql在使原创 2021-02-18 11:59:14 · 5816 阅读 · 9 评论 -
使用docker安装的mysql如何让其他机器访问
使用docker刚安装的mysql,是不能被其他机器访问的。解决方法如下:1.创建MySQL容器 docker run -di --name mysql -p 33306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql-p 代表端口映射,格式为 宿主机映射端口:容器运行端口-e 代表添加环境变量 MYSQL_ROOT_PASSWORD是root用户的登陆密码可能遇到的问题这个时候使用客户端连接工具连接的话,会遇到: Client does...转载 2021-02-09 21:24:36 · 2715 阅读 · 0 评论 -
Docker 安装 MySQL
目录Docker 安装 MySQL1、查看可用的 MySQL 版本2、拉取 MySQL 镜像3、查看本地镜像4、运行容器5、安装成功Docker 安装 MySQLMySQL 是世界上最受欢迎的开源数据库。凭借其可靠性、易用性和性能,MySQL 已成为 Web 应用程序的数据库优先选择。1、查看可用的 MySQL 版本访问 MySQL 镜像库地址:https://hub.docker.com/_/mysql?tab=tags。可以通过 Sort by 查看其..转载 2021-02-09 21:22:42 · 1792 阅读 · 0 评论