202110-01 解决Mysql的left join无效及使用的注意事项说明 Mysql的leftjoin无效及使用今天写sql发现使用leftjoin没有把左边表的数据全部查询出来,让我郁闷了一会,后来仔细研究了一会才知道自己犯了个常识性的错误(我是菜鸟)这是原sql这样的查询并不能将tb_line这张表的数据都查询出来,好尴尬...后面我才知道原来当我们进行多表查询,在执行到where之前,会先形成一个临时表而on就是临时表中的条件筛选,使用leftjoin则不管条件是否为真,都会查询出左边表的数据,条件为假的,则显示... 继续阅读 >
202109-30 mysql left join快速转inner join的过程 在日常优化过程中,发现一个怪事情,同一个SQL出现两个完全不一样执行计划,leftjoin连驱动表都可以变成不一样。对于leftjoin,如果where条件里有被关联表过滤,leftjoin有可能被转成innerjoin,本案例中shopInfo有ShopCategory='LOC'过滤条件;保证shopInfo的记录非NULL,因此leftjoin在优化过程中可以转为innerjoin。那么O和S的JOIN顺序就是可以交换的。验证结论:创建表:--班级表CREATETABLET_CLASS(class_idi... 继续阅读 >
202109-22 浅析MySQL如何实现事务隔离 目录一、前言二、RC与RR隔离级别2.1、RR事务隔离级别下查询结果2.2、RC事务隔离级别下查询结果三、事务隔离在MVCC的实现3.1、数据行ROW的多版本3.2、视图数组3.3、一致性视图3.4、当前读与快照读3.4.1、当前读与快照读规则3.4.2、当前读与快照读解释3.4.3、RC读可提交下的视图规则一、前言众所周知,MySQL的在RR隔离级别下查询数据,是可以保证数据不受其它事物影响,而在RC隔离级别下只要其它事物commit后,数据都会读到commit之... 继续阅读 >
202109-19 MySQL中IF()、IFNULL()、NULLIF()、ISNULL()函数的使用详解 在MySQL中可以使用IF()、IFNULL()、NULLIF()、ISNULL()函数进行流程的控制。1、IF()函数的使用IF(expr1,expr2,expr3),如果expr1的值为true,则返回expr2的值,如果expr1的值为false,则返回expr3的值。SELECTIF(TRUE,'A','B');--输出结果:ASELECTIF(FALSE,'A','B');--输出结果:B2、IFNULL()函数的使用IFNULL(expr1,expr2),如果expr1的值为null,则返回expr2的值,如果expr1的值不为null,则返回expr1的值。例1... 继续阅读 >
202109-19 Springboot整合camunda+mysql的集成流程分析 目录一、创建springboot工程二、修改maven配置2.1、修改springboot版本号2.2、引入camunda包三、修改application.yaml配置四、创建mysql数据库五、启动springboot工程六、登录访问camunda一、创建springboot工程使用IDEA工具,选择File->New->Project,选择SpringInitialzr输入springboot工程基本信息,本示例命名为“camunda-demo1”,jdk版本选择8在选择springboot组件的时候,需要选择SpringWeb、JDBCAPI、MySqlDriver这三... 继续阅读 >
202109-18 浅谈MySQL之浅入深出页原理 目录一、页的概览二、Infimum和Supremum三、使用PageDirectory四、页的真实面貌4.1、FileHeader4.2、PageHeader4.3、Infimum&SupremumRecords4.4、UserRecords4.5、FreeSpace4.6、PageDirectory4.7、FileTrailer五、总结一、页的概览我们往MySQL插入的数据最终都是存在页中的。在InnoDB中的设计中,页与页之间是通过一个双向链表连接起来。而存储在页中的一行一行的数据则是通过单链表连接起来的。上图中的UserR... 继续阅读 >
202109-16 详解MySQL多版本并发控制机制(MVCC)源码 目录一、前言二、MVCC(多版本并发控制机制)2.1、RepeatableRead2.2、ReadCommit2.3、MVCC的优势三、MVCC(实现机制)3.1、select运行栈3.2、read_view的创建过程3.3、行版本可见性3.4、undolog搜索可见版本的过程3.5、read_view创建时机再讨论四、MVCC和锁的同时作用导致的一些现象五、总结一、前言作为一个数据库爱好者,自己动手写过简单的SQL解析器以及存储引擎,但感觉还是不够过瘾。<<事务处理-概念与技术>>诚然讲的非常透彻... 继续阅读 >
202109-14 MySQL快速插入一亿测试数据 目录1、建表1.1建立测试表t_user1.2创建临时表2、生成数据2.1用python生成【一亿】 记录的数据文件(这个确实稍微花点时间)2.2将生成的文件导入到临时表tmp_table中3、以临时表为基础数据,插入数据到t_user中4、参考1、建表1.1建立测试表t_userCREATETABLE`t_user`(`id`int(11)NOTNULLAUTO_INCREMENT,`c_user_id`varchar(36)NOTNULLDEFAULT''COMMENT'用户Id',`c_name`varchar(22)NOTNULLD... 继续阅读 >
202109-14 分析MongoDB和MySQL各自的关键特性、差别和优势 目录什么是MySQL?什么是MongoDB?MongoDB与MySQL的差异数据模式和容量性能和速度安全性事务的特性:原子性、一致性、隔离性和持久性查询MongoDBvs.MySQL:分别在什么情况下使用结论MongoDB和MySQL都是不错的数据库,都具有优良的性能。然而,它们是否成功取决于应用场景。首先应当了解它们各自不同的运行环境,而不能只比较各自的优点和缺点。因此,在本文中,我们将探讨MongoDB和MySQL各自的关键特性、差别和优势... 继续阅读 >
202109-14 Python3 MySQL 数据库连接的使用示例 目录什么是PyMySQL?PyMySQL安装数据库连接实例:创建数据库表数据库插入操作数据库查询操作数据库更新操作删除操作执行事务错误处理本文我们为大家介绍Python3使用PyMySQL连接数据库,并实现简单的增删改查。什么是PyMySQL?PyMySQL是在Python3.x版本中用于连接MySQL服务器的一个库,Python2中则使用mysqldb。PyMySQL遵循Python数据库APIv2.0规范,并包含了pure-PythonMySQL客户端库。PyMySQL安装在使用Py... 继续阅读 >
202109-14 MySQL8.0.18配置多主一从 目录1.现实背景2.约定3.配置master3.1.配置启动参数3.2.重启服务使参数生效3.3.以root身份登录,创建用户,赋予密码,授权,刷新权限4.配置slave服务器4.1.配置启动参数4.2.重启服务使参数生效5.配置多主一从5.1.查看master状态5.2.配置slave与master的关联5.3.准备表5.4.启动slave,查看slave状态1.现实背景现有4台主机,均能够自动地采集数据,并存入其MySQL数据库中,另有1台专门用于处理数... 继续阅读 >
202109-13 如何搭建 MySQL 高可用高性能集群 目录MySQLNDBCluster是什么搭建集群的前置工作开始部署集群部署管理服务器部署数据服务器部署SQL服务所有集群服务部署完毕,我们来测试一下集群是否真的部署成功数据库集群部署成功了,总结一下集群的注意事项MySQLNDBCluster是什么MySQLNDBCluster是MySQL的一个高可用、高冗余版本,适用于分布式计算环境。文档链接搭建集群的前置工作至少准备3台服务器,一台作为管理服务器,两台作为数据服务器和SQL服务器,当... 继续阅读 >
202109-13 MySQL 发生同步延迟时Seconds_Behind_Master还为0的原因 目录问题描述原理简析问题分析拓展一下总结一下问题描述用户在主库上执行了一个alter操作,持续约一小时。操作完成之后,从库发现存在同步延迟,但是监控图表中的Seconds_Behind_Master指标显示为0,且binlog的延迟距离在不断上升。原理简析既然是分析延迟时间,那么自然先从延迟的计算方式开始入手。为了方便起见,此处引用官方版本5.7.31的源代码进行阅读。找到计算延迟时间的代码:./sql/rpl_slave.ccboolshow_slave_... 继续阅读 >
202109-13 分析mysql中一条SQL查询语句是如何执行的 目录一、MySQL逻辑架构概览二、连接器(Connector)三、查询缓存(QueryCache)四、解析器(Parser)五、优化器(Optimizer)六、执行器七、小结一、MySQL逻辑架构概览MySQL最重要、最与众不同的特性就是它的可插拔存储引擎架构(pluggablestorageenginearchitecture),这种架构的设计将查询处理及其他系统任务和数据的存储/提取分离开来。来看官网的解释:TheMySQLpluggablestorageenginearchitectureenablesadat... 继续阅读 >
202109-13 MySQL如何使用使用Xtrabackup进行备份和恢复 目录1备份1.1全备1.2增备2备份恢复2.1准备数据2.2进行恢复3目录结构4备份脚本4.1脚本4.2配置文件5恢复脚本5.1脚本5.2配置文件1备份进行备份前需要先创建备份用户,直接使用root用户进行备份也行,但是这样不太规范。createuserbackup@'localhost'identifiedby'123456';grantreload,process,locktables,replicationclienton*.*tobackup@localhost;1.1全备备份整个库,使用的是备份用户,备份... 继续阅读 >
202109-13 MySQL 数据恢复的多种方法汇总 目录1、前言2、直接恢复2.1mysqldump备份全量恢复2.2xtrabackup备份全量恢复2.3基于时间点恢复3、恢复一个表3.1从mysqldump备份恢复一个表3.2从xtrabackup备份恢复一个表4、跳过误操作SQL4.1使用备份文件恢复跳过4.2使用延迟库跳过5.闪回。5.1binlog2sql5.2MyFlash1、前言数据恢复的前提的做好备份,且开启binlog,格式为row。如果没有备份文件,那么删掉库表后就真的删掉了,lsof中还有记录的话,有可能恢复一... 继续阅读 >