-
面试官:你说说一条更新SQL的执行过程?
在上一篇《面试官:你说说一条查询SQL的执行过程?》中描述了Mysql的架构分层,通过解析器、优化器和执行引擎完成一条SQL查询的过程,那这一篇续上继续说明一条更新SQL的执行过程。对于一个SQL语句的更新来说,前面的流程都可以说类似的,通过解析器进行语法分析,优化器优化,执行引擎去执行,这个都没有什么问题,重点在于多了一点东西,那就是redo_log、undo_log和bin...
-
MySQL索引是怎么支撑千万级表的快速查找?
前言在 MySQL 官方提到,改善操作性能的最佳方法 SELECT 在查询中测试的一个或多个列上创建索引。索引条目的作用类似于指向表行的指针,从而使查询可以快速确定哪些行与WHERE子句中的条件匹配,并检索这些行的其他列值。所有MySQL数据类型都可以建立索引。尽管可能会为查询中使用的每个可能的列创建索引,但不必要的索引会浪费空间和时间,使MySQL难以确定要使用的索引。索引还...
-
MySQL 深入学习总结
1.数据库基础1.1 MySQL 架构和其它数据库相比,MySQL 有点与众不同,它的架构可以在多种不同场景中应用并发挥良好作用。主要体现在存储引擎的架构上,插件式的存储引擎架构将查询处理和其它的系统任务以及数据的存储提取相分离。这种架构可以根据业务的需求和实际需要选择合适的存储引擎,各层介绍:1.1.1 连接层最上层是一些客户端和连接服务,包含本地 sock 通信和大多数基于...
-
MySQL常用的4种主从复制架构
目录一主多从复制架构多级复制架构双主(Dual Master)复制架构多源(Multi-Source)复制架构如何优化主从延迟问题?复制的4中常见架构有一主多从复制架构、多级复制架构、双主(Dual Master)复制架构和多源(Multi-Source)复制架构。一主多从复制架构在主库读取请求压力非常大的场景下,可以通过配置一主多从复制架构实现读写分离,把大量的对实时性要求不...
-
MySQL不同版本多实例部署
1 背景介绍我们在数据库运维的过程中.会遇到不同版本的数据库部署需求.同时测试环境数据库需求更是不同.有时为了节省资源.我们需要进行多实例的部署.或者在我们自己学习的过程中也需要进行多实例的部署..比如搭建各种MySQL的集群(mha,PXC,Xenon).这篇文章我将介绍多版本多实例的部署.2 部署介绍多版本多实例版本介绍:下载对应版本MySQL2.1 软件下载下载地址:ht...
-
深入理解Mysql数据存储
前言本文内容Mysql 数据文件说明Mysql 数据逻辑存储架构Mysql 表空间,主要是系统表空间和独立表空间Mysql 数据类型时区对 datetime 和 timestamp 影响,java 中 LocalDatetime 保存时,时间和预期不符的原因分析和解决办法varchar(n) 和 char(n) 保存时,n 能取多少,n 的含义。一行数据中 varchar 能存...
-
MySQL模式开发设计规范问题与建议
1.时间类型的数据默认值是否可以为null?根据反馈,时间类型的数据默认值往往在业务上无法赋予一个确定的值,而”1970-01-01“、”0000-01-01“等等的默认值在开发过程中会增加判断工作,经过新版MYSQL(版本号8.0.19)测试,为null的数据可以走索引,故开放时间类型的数据默认值的限制。* 补充不建议为Null的技术观点:老版本MYSQL在对null值的判断...
-
mysql垂直分库,水平分库,垂直分表,水平分表
之前经常被问道这些分库分表的概念,只是大概知道,但是具体如何定义的,问什么这么定义还是不太理解,今天对着数据表中的数据沉思的时候,突然间醒悟,原来这些概念非常好理解,而且可以说水平和垂直这两个词用得恰到好处,非常形象地帮助我们理解它们。水平分表顾名思义,水平分表就是把表中的数据进行了水平切割,意味着按照行进行切割,也就是说不同行的数据被切割后可能在不同的表中。如图所示,根据水平...
-
MySQL 8.0.22 新特性
MGR 具备了 RPO=0 的高可用容灾能力,但并不适合跨 WAN 场景下使用,像有两地三中心容灾需求的场景,单纯靠 MGR 是无法满足的,必须要拉上异步复制。同城双中心距离在百十公里内,网络延迟可接受,要求 RPO=0,那么部署一组 MGR;异地容灾中心距离在上百公里,网络延迟较大,接受 RPO>0,通过异步复制,部署单节点或对称部署一组 MGR。在两地三中心架构下,如...
-
最完整的Explain总结,妈妈再也不担心我的SQL优化了
在 select 语句之前增加 explain 关键字,MySQL 会在查询上设置一个标记,执行查询时,会返回执行计划的信息,而不是执行这条SQL(如果 from 中包含子查询,仍会执行该子查询,将结果放入临时表中)CREATE TABLE `film` ( `id` int(11) NOT NU...
-
分享一份大佬的MySQL数据库设计规范,值得收藏
概述MySQL数据库与 Oracle、 SQL Server 等数据库相比,有其内核上的优势与劣势。我们在使用MySQL数据库的时候需要遵循一定规范,扬长避短。1、数据库设计以下所有规范会按照【高危】、【强制】、【建议】三个级别进行标注,遵守优先级从高到低。对于不满足【高危】和【强制】两个级别的设计,DBA会强制打回要求修改。1、库名【强制】库的名称必须控制在32个字符以内,相...
-
高并发环境下如何让Redis和Mysql保持数据统一
业务场景在高并发的业务场景下,数据库大多数情况都是用户并发访问最薄弱的环节。所以,就需要使用redis做一个缓冲操作,让请求先访问到redis,而不是直接访问MySQL等数据库。这个业务场景,主要是解决读数据从Redis缓存,一般都是按照下图的流程来进行业务操作。读取缓存步骤一般没有什么问题,但是一旦涉及到数据更新:数据库和缓存更新,就容易出现缓存(Redis)和数据库(MyS...
-
阿里架构师教你处理高并发:2种方法,解决Redis和Mysql一致性
需求起因在高并发的业务场景下,数据库大多数情况都是用户并发访问最薄弱的环节。所以,就需要使用redis做一个缓冲操作,让请求先访问到redis,而不是直接访问MySQL等数据库。这个业务场景,主要是解决读数据从Redis缓存,一般都是按照下图的流程来进行业务操作。读取缓存步骤一般没有什么问题,但是一旦涉及到数据更新:数据库和缓存更新,就容易出现缓存(Redis)和数据库(MyS...
-
2019,遇见最好的 MySQL 数据库
2019年,关于 MySQL 的新特性、新版本消息不绝于耳: 2019,10月,MySQL 8.0.18 发布,支持 HASH JOIN;2019,4月,MySQL 8.0.11 发布,实现比 MySQL 5.7 快 2 倍的速度; MySQL 一直是互联网数据内核的主宰,但是在经历从互联网到企业级的转变中,却是困难重重。然而在 2019年,越来越多的企业级客户开始在业务核心...
-
程序员冷知识,Mysql的数据库引擎为什么多选InnoDB?
这是一道经典的程序员面试题,Mysql数据库在超大并发下,特别是Insert语句比较多的情况下,应该选择哪种存储引擎,很多人会说MyISAM,今天我们来简单介绍下Mysql的MyISAM存储引擎。锁粒度首先我们来了解 一些MyISAM与InnoDB的一些区别,首先是锁粒度,MyISAM只有表锁而InnoDB拥有行锁。也就是说,Mysql的InnoDB的锁粒度更小,锁粒度小,有时...
-
mysql where 字段值末尾加空格也能查到数据
今天遇到了一个很奇怪的mysql查询问题,当作为查询条件的字符串末尾有空格时,可以查到数据库中末尾不含空格的值。经过多次查阅资料,最后找到三种解决的方法,现在分享给大家。原因:如果字段是char或varchar类型,那么在字符串比较的时候MySQL使用PADSPACE校对规则,会忽略字段末尾的空格字符。解决方式:若想做到精确匹配可以使用下面几种方法:第一种方法:使用likese...
-
springboot中配置mysql一次允许多条sql语句执行
在springboot中,如果想要对mysql一次性执行多条sql语句,在数据连接配置信息中,要增加allowMultiQueries=true,这样才能一次执行多条sql语句。 理论上这样就可以了,但实际中发现在springboot中,仅仅这样配置是没有用的,执行结果会出现异常,异常提示为: Caused by: java.sql.SQLException: sql inj...
-
MySQL5.7占用CPU过高的问题分析
升级mysql数据库到5.7版本后,发现MySQL对CPU和内存的消耗增加了不少,内存增加量还好一些,但CPU的飙升就麻烦一些了,这样会占用不少的资源。 其实可以使用MySQL内部的表定位问题SQL,通过下面这个SQL来定位问题:select a.THREAD_OS_ID,b.user,b.host,b.db,b.command,b.time,b.state,b.infofr...
-
MySQl数据库如何备份以及备份命令方法介绍
一、备份的目的 做灾难恢复:对损坏的数据进行恢复和还原需求改变:因需求改变而需要把数据还原到改变以前测试:测试新功能是否可用 二、备份需要考虑的问题 可以容忍丢失多长时间的数据;恢复数据要在多长时间内完; 恢复的时候是否需要持续提供服务;恢复的对象,是整个库,多个表,还是单个库,单个表。 三、备份的类型 1、根据是否需要数据库离线 冷备(cold backup)...
-
Mysql数据库分库后跨库join解决方案
一、前言 近几个月项目中数据库开始分库了,把一个原本60多张表的数据库分成了6个部分,每个部分有自己业务之内的表,整个数据库只是物理分开,逻辑依然是链接的,通过mycat这个数据库中间件对整个数据库进行路由转发。但是分库后随之而来的问题之一就是跨库join,可以说网上的解决方案已经烂大街了。但是小编还是觉得有必要总结分析一下。 二、数据库结构示例 为了公...
-
mysql中emoji表情转换入库,超级实用
emoji表情符在平时用的时候特别的爽,但是有时候在开发的时候就比较的难受,微信开发昵称往往都有表情符导致无法入库。尝试了往上很多的方法都没有得以解决,甚至我改了数据库配置后发现库不能启动了(哎哟我靠,感谢那些博主的建议)。所以今天给大家个工具类,用着是挺舒服的。 public class EmojiUtil { /** * @Description e...
-
并发扣款,如何保证数据的一致性?
沈老师,我们有个业务,同一个用户在并发“查询,逻辑计算,扣款”的情况下,余额可能出现不一致,请问有什么优化方法么? 扣款的业务场景是怎样的? 用户购买商品的过程中,要对余额进行查询与修改,大致的业务流程如下:第一步,从数据库查询用户现有余额: SELECT money FROM t_yue WHERE uid=$uid; 不妨设查询出来的$old_mon...
-
如何在mysql数据库中查询用户所有上级
有时候,一句SQL可以实现的MYSQL递归查询,就不想用存储过程了。如何在MySQL数据库中查询用户所有上级,下面是一个可行的方法,前提是数据库设计一定要标准化,id使用数字型int,pid为0则为顶级。如果使用GUID的可以路过! 下面写出MySQL数据库中查询用户所有上级的SQL语句:select id as id,preid as 父id ,levels as 父到子之...
-
1142 - select command denied to user 'sa'@'127.0.0.1' for table 'user'
错误信息的字面意思是:表“user”拒绝用户“sa”@“127.0.0.1”的命令 ,很明显用户没有权限,那就给他授权呗! 一、使用客户端授权(Navicat Premium 12)1、使用root用户登陆mysql2、新建查询,输入指令:use mysql;select * from user where user='sa';SQL语句where后面的条件写要授权的那个用户...