自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(99)

原创 堪比培训机构的MySQL系列博客

这个blog,我整理了我之前写的MySQL开发系列和MySQL运维系列,知识丰富程度堪比培训机构个人能力有限,如有错误的地方,欢迎指正。文章目录一.MySQL开发系列1.1 MySQL 行转列1.2 MySQL 常用的函数1.3 MySQL 表连接1.4 MySQL分组语句小结1.5 MySQL with语句1.6 MySQL高级窗口函数1.7 MySQL正则表达式1.8 MySQL编程二.MySQL运维系列2.1 MySQL安装2.2 MySQL体系结构2.3 MYSQL启动和关闭2.4 MySQL配

2020-09-09 12:19:46 1501

原创 MySQL开发不可错过的博客

这个blog我们来聊聊MySQL的开发很多同学熟悉的MySQL sql的基本知识,sql的增删改查、表连接、分组聚合、常用函数等之后,就开始是想要进阶了。最近抽时间整理了一下MySQL sql进阶以及MySQL存储过程编程的blog,由于个人能力有限,如有错误的地方,欢迎指正。如需要scott用户下建表及录入数据语句,可参考:scott建表及录入数据sql脚本一.MySQL 行转列MySQL行转列MySQL行转列是MySQL岗位笔试的一个入门级别的考试题目,做一些日常的统计分析报表的时候经常会

2020-06-12 10:17:29 884

原创 Oracle sql进阶,不可错过的文章

文章目录一.Oracle 行转列二.Oracle 常用的字符处理三.Oracle 表连接四.Oracle层次查询小结五.Oracle高级分组小结六.Oracle with语句七.Oracle高级分析函数八.Oracle正则表达式九.Oracle高级语句Model子句这个blog我们来聊聊Oracle的sql进阶很多同学熟悉了Oracle sql的基本知识,sql的增删改查、表连接、分组聚合、常用函数等之后,就开始是想要进阶了。最近抽时间整理了一下Oracle sql进阶的blog,由于个人能力有限,如

2020-05-11 09:38:06 159

原创 MySQL 生成累计差

备注:测试数据库版本为MySQL 8.0一.需求如果表中既有库存,又有出货记录,根据表type字段来判断,想想求出截止当前出货时间的当前库存测试数据:drop table t;create table t(id int,type varchar(100),amt decimal(15,2));insert into t values (1,'库存',100000.00);insert into t values (2,'出货',2000.00);insert into t values

2020-10-26 10:39:56 3

原创 MySQL 生成累计乘积

备注:测试数据库版本为MySQL 8.0如需要scott用户下建表及录入数据语句,可参考:scott建表及录入数据sql脚本一.需求计算某给数字列的累乘积。其操作方式与“计算累计和”相似,只是使用乘法而不是加法。二.解决方案作为例子,本解决方案中都计算职员工资的累成绩。虽然工资的累成绩没有多大用处,然而可以很容易地把该技巧用于其它更有用的领域。select e.empno,e.ename,e.sal, ( select round(exp(sum(ln(d.sal))))

2020-10-23 14:15:38 8

原创 MySQL 生成累计和

备注:测试数据库版本为MySQL 8.0如需要scott用户下建表及录入数据语句,可参考:scott建表及录入数据sql脚本一.需求计算某个列中所有值的累计和比如,经常遇到的业务需求就是领导需要看每个月的销售额,已经累计到当月的销售额。解决方案:下面给出了一种解决方案,它展示了如何计算所有职员工资的累计和。代码:select e.ename, e.sal, ( select sum(d.sal) from emp d where d.empno &lt

2020-10-22 11:43:15

原创 MySQL 求一个表的个数

备注:测试数据库版本为MySQL 8.0如需要scott用户下建表及录入数据语句,可参考:scott建表及录入数据sql脚本一.需求计算一个表的行数,或计算某个列中值的个数。例如,找到职员总数及每个部门的职员数。二.解决方案计数使用count(*) 即可如果要对表内分组进行计数,可以用group by和count(*)即可count(*)是表的总数,count(列)是列不为空的总数代码:select count(*)from emp;select deptno,count(*)

2020-10-21 13:47:36 41

原创 MySQL 分解IP地址

备注:测试数据库版本为MySQL 8.0一.需求将一个IP地址分解到列中,考虑下面列出的IP地址:111.22.3.4要得到如下所示的查询结构:A B C D111 22 3 4二.解决方案依旧是MySQl自带的substring_index函数即可解决代码:select substring_index(ip,'.',1) A, substring_index(substring_index(ip,'.',2),'.',-1) B, subs

2020-10-20 16:17:10 10

原创 MySQL 提取第n个分隔的子串

备注:测试数据库版本为MySQL 8.0一.需求数据准备create view v5 asselect 'mo,larry,curly' as nameunion allselect 'tina,gina,jaunita,regina,leena' as name;mysql> select * from v5;+--------------------------------+| name |+----------------

2020-10-19 13:48:27 9

原创 MySQL生成连续数字

MySQL 使用过程当中,经常需要有连续数字的表用来处理一些复杂的报表逻辑,这个blog介绍几种生成连续数字的表方法如下,我需要生成一张表 id连续的从 1-50文章目录一.自定义变量的方法二.存储过程的方法三.MySQL 8.0 With递归方法一.自定义变量的方法构造两个临时表 一个5一个10,通过笛卡尔积可以构造50行记录,即可构造50条记录SELECT @xi:=@xi+1 as xc from (SELECT 1 UNION SELECT 2 UNION SELECT 3

2020-10-16 11:27:17 31

原创 MySQL 提取字符和数字里面的数字

备注:测试数据库版本为MySQL 8.0一.需求测试数据准备:mysql> create table test1(id int,str varchar(100));Query OK, 0 rows affected (0.02 sec)mysql> insert into test1 values (1,'abc123'),(2,'123abc'),(3,'1abc23'),(4,'abc'),(5,'123');Query OK, 5 rows affected (0.01 se

2020-10-14 14:13:58 32

原创 MySQL按顺序排列字符串

备注:测试数据库版本为MySQL 8.0如需要scott用户下建表及录入数据语句,可参考:scott建表及录入数据sql脚本一.需求对表中的字符串,按字母顺序排列其中的各个字符。例如:±-------+| ename |±-------+| SMITH || ALLEN || WARD || JONES || MARTIN || BLAKE || CLARK || SCOTT || KING || TURNER || ADAMS || JAME

2020-10-13 14:15:46 19

原创 MySQL 将分隔数据转换为多值IN列表

备注:测试数据库版本为MySQL 8.0如需要scott用户下建表及录入数据语句,可参考:scott建表及录入数据sql脚本一.需求已经有了分隔数据,想要将其转换为where子句IN列表中的项目例如:7654,7689,7782,7788要将该字符串用在WHERE子句中,但是下面的SQL语句是错误的,因为EMPNO是一个数值列:select ename,sal,deptnofrom empwhere empno in (‘7654,7689,7782,7788’)因为EMPNO是一个数

2020-10-12 14:27:52 15

原创 MySQL 根据表中的行创建一个分隔列表

备注:测试数据库版本为MySQL 8.0如需要scott用户下建表及录入数据语句,可参考:scott建表及录入数据sql脚本一.需求原表数据:±-------±-------+| deptno | ename |±-------±-------+| 20 | SMITH || 30 | ALLEN || 30 | WARD || 20 | JONES || 30 | MARTIN || 30 | BLAKE ||

2020-10-12 09:33:41 12

原创 MySQL 提取姓名大写首字母缩写

备注:测试数据库版本为MySQL 8.0文章目录一.需求二.解决方案三.使用MySQL函数一.需求将全名转换为大写首字母缩写,比如下面的名字:Stewie Griffin要求返回如下结果S.G二.解决方案需要注意的就是SQL并不像C或Python语言那样灵活,所以,创建一个通用的解决方案来处理所有格式的姓名对于SQL来说不是一件容易的事情。在这里所介绍的解决方案假定名字都是由名和姓,或是由名、中间名(中间名缩写)及姓组成。代码:-- 2个select case when

2020-10-10 14:04:17 39

原创 MySQL 判断字符串是不是数字字符类型

备注:测试数据库版本为MySQL 8.0如需要scott用户下建表及录入数据语句,可参考:scott建表及录入数据sql脚本一.需求需要判断字符串中是否只包含数字和字符,如果包含其他的,不显示数据二.解决方案这类需求,只能考虑使用正则表达式来解决代码create view v asselect ename as data from empwhere deptno = 10union allselect concat(ename,',$',cast(sal as char(4) ),

2020-09-21 10:13:38 8

原创 MySQL 从字符串中删除不需要的字符

备注:测试数据库版本为MySQL 8.0如需要scott用户下建表及录入数据语句,可参考:scott建表及录入数据sql脚本一.需求将emp表中的元音字母 AEIOU都去除掉二.解决方案通过MySQL的replace函数进行多次替换可以解决这个问题也可以通过MySQL的正则表达式来处理代码:select ename,replace(replace(replace(replace(replace(ename,'A',''),'E',''),'I',''),'O',''),'U','') a

2020-09-18 10:53:00 38

原创 MySQL 计算字符在字符串中出现的次数

备注:测试数据库版本为MySQL 8.0一.需求计算一个字符或子串在给定的字符串中出现的次数。例如:10,CLARK,MANAGER要计算在这个字符串中有多少个逗号。二.解决方案首先计算原始字符串的长度,然后计算去掉逗号后字符串的长度,这两者的差就是逗号在该字符串中出现的次数。MySQL中使用replace和length函数即可代码:select (length('10,CLARK,MANAGER') - length(replace('10,CLARK,MANAGER

2020-09-17 09:17:19 38

原创 MySQL 字符串中包含引号

备注:测试数据库版本为MySQL 8.0一.需求sql中引号是个特殊的存在,经常需要进行输出例如,我想输出"I’m a boy" 这个里面就有一个单引号二.解决方案测试记录mysql> select 'I''am a boy';+------------+| I'am a boy |+------------+| I'am a boy |+------------+1 row in set (0.00 sec)mysql> select '''' ;+---+|

2020-09-16 09:20:34 58

原创 MySQL 遍历字符

备注:测试数据库版本为MySQL 8.0如需要scott用户下建表及录入数据语句,可参考:scott建表及录入数据sql脚本一.需求遍历一个字符,并将其中的每个字符都作为一行返回,但是sql没有循环操作例如:要将表EMP中ENAME值为’KING’的字符串显示为4行,每行中都包含"KING"中的一个字符二.解决方案使用笛卡尔积生成行号,用来在该行中返回字符串中的每个字符。然后使用MySQL内置的字符串分析函数来摘出所要的字符。代码:-- 解决 t10这样一个表来形成笛卡尔积sele

2020-09-16 09:18:46 37

原创 MySQL 使用sql来生成sql

备注:测试数据库版本为MySQL 8.0一.需求我想查询某个库下所有表的总记录数二.解决方案-- 通过系统表 拼接sqlselect concat('select count(*) from ',table_name,';') tab_count from information_schema.tables where table_schema = 'ZQS';-- 拷贝输出进行执行select count(*) from area_admin_contrast;select coun

2020-09-15 09:08:41 9

原创 MySQL kill使用案例

MySQL数据库版本 8.0.17文章目录前言一.查询表大小二.碎片整理参考文献:前言业务有需求,将一张大表 1000w+数据,需要从Oracle数据库全量同步到MySQL前DBA用python写的脚本,每天全量同步一次,先delete再insert现在表的空间已经差不多2G了,需要进行清理一.查询表大小select concat(round(sum(DATA_LENGTH/1024/1024),2),'MB') as data from information_schema.TABLES w

2020-09-15 09:05:33 19

原创 MySQL 优化之压缩

环境:MySQL 8.0一.描述一些不常用的表数据量太大,需要压缩表进行空间清理-- 表结构mysql> show create table t1\G*************************** 1. row *************************** Table: t1Create Table: CREATE TABLE `t1` ( `id` int DEFAULT NULL, `name` varchar(1000) DEFAULT N

2020-09-14 09:13:15 14

原创 Oracle 11g开机自启动

一些测试机器,频繁重启,需要DBA手工来启数据库设置成开机自启动后,DBA就可以不用管这个一.编辑/etc/oratab文件先查看ORACLE_HOME目录*********>echo $ORACLE_HOME/oracle/ora11g/db修改配置文件vi /etc/orata将orcl:/oracle/ora11g/db:N 修改为 orcl:/oracle/ora11g/db:Y二.添加数据库启动脚本dbstartvi /etc/rc.d/rc.local新增

2020-09-11 14:49:36 28

原创 Oracle-求素数

需求:求200w以内的素数素数是只能被1和自身整除的数,1不是素数一.SQL版先用2w进行测试-- 非1和自身,只要有整除的,通过not exists 剔除 WITH t AS (SELECT rownum+1 rn FROM dual CONNECT BY rownum <= 20000 -1),t1 AS (SELECT rownum+1 rn FROM dual CONNECT BY rownum <= 20000 -1)SELECT count(*) FROM t

2020-09-11 09:21:52 34

原创 MySQL 通过sql输出99乘法表

备注:测试数据库版本为MySQL 8.0代码-- 用with递归构造1-9的数据with RECURSIVE c(n) as (select 1 n union all select n + 1 from c where n < 9),tmp1 as(SELECT c1.n n1,c2.n n2,CONCAT(c1.n,' * ',c2.n,' = ',c1.n*c2.n) expfrom c c1inner join c c2on c1.n <= c2.n)selec

2020-09-08 11:23:40 72

原创 MySQL 运维管理工具--pt(Percona-toolkit)

文章目录一.检查和安装与Perl相关的模块二.下载和安装percona toolkit的包2.1 下载和安装percona toolkit的包2.2 安装percona-toolkit工具包2.3 percona-toolkit工具介绍2.3.1 pt-archiver(归档表)2.3.2 pt-online-schema-change(在线修改表结构)2.3.3 pt-table-checksum2.3.4 pt-table-sync2.3.5 pt-deadlock-logger(死锁检测)2.3.6

2020-09-08 09:27:38 89

原创 MySQL 元数据查询

备注:测试数据库版本为MySQL 8.01.查看某个数据库下的表名select table_namefrom information_schema.tableswhere table_schema = 'ZQS';测试记录mysql> select table_name -> from information_schema.tables -> where table_schema = 'ZQS';+---------------------+| TABLE

2020-09-07 09:00:20 37

原创 MySQL数据恢复工具之MyFlash

文章目录概述一.MyFlash安装1.1 在线安装1.2 离线安装二.MyFlash参数2.1 参数介绍2.2 语法举例三.MyFlash测试案例3.1 数据准备3.2 测试恢复DML3.3 测试DDL恢复参考:概述MyFlash是美团开发的一个回滚DML操作的工具,该工具是开源的,github地址为:https://github.com/Meituan-Dianping/MyFlash。通过该工具,可以实现MySQL数据库的闪回。优点1.如果binlog日志保留,可以闪回到任意时间2.可以针对实

2020-09-07 08:55:55 126

原创 MySQL 用其它表的值更新数据

备注:测试数据库版本为MySQL 8.0如需要scott用户下建表及录入数据语句,可参考:scott建表及录入数据sql脚本测试数据准备:mysql> create table new_sal(deptno int,sal int) character set utf8mb4;Query OK, 0 rows affected (0.02 sec)mysql> insert into new_sal values (10,4000);Query OK, 1 row affecte

2020-09-04 09:35:53 43

原创 MySQL 数据恢复工具之binlog2sql

文章目录概述一.安装pip和binlog2sql1.1 安装步骤1.2 安装python31.3 安装新版本openssl1.4 pip安装报错11.5 pip安装报错21.6 pip安装binlog2sql报错二.binlog2sql参数相关2.1 binlog2sql参数2.2 mysql server相关参数2.3 用来闪回数据的user需要的最小权限集合三.binlog2sql使用案例3.1 数据准备3.2 使用binlog2sql找到恢复sql参考文献:概述github连接:https://g

2020-09-04 09:33:01 191

原创 MySQL阻止对某几列插入

备注:测试数据库版本为MySQL 8.0如需要scott用户下建表及录入数据语句,可参考:scott建表及录入数据sql脚本问题:防止用户或是错误的软件应用程序对某几列插入数据。例如,只允许某个程序向EMP表中插入EMPNO、ENAME和JOB列。解决方案:在表中创建一个视图,该视图将只显示允许用户进行操作的列,强制所有的插入操作都通过该视图进行。例如,创建一个只显示表EMP中特定3列的视图:create view new_emps asselect empno,ename,jobf

2020-09-03 09:20:55 35

原创 MySQL 工具之mysqldumper介绍

文章目录概述一.mysqldumper安装二.参数介绍2.1 mydumper参数详解2.2 myloader参数详解三.使用案例3.1 测试数据准备3.2 备份test库下的t1和t2两张表3.3 恢复数据四.mydumper正则拓展参考文献:概述mysqldump无法并行,这点与Oracle的expdp相比,存在一定的劣势,但是开源的mysqldumper是一个很好的补充。mydumper(http://www.mysqldumper.org/)是一个在GNU GPLv3许可下发布的高性能MySQ

2020-09-03 09:17:01 106

原创 MySQL检测两个表中是否有相同数据

备注:测试数据库版本为MySQL 8.0如需要scott用户下建表及录入数据语句,可参考:scott建表及录入数据sql脚本问题:要知道两个表或视图中是否有相同的数据(基数和值)。考虑这个视图create view vasselect * from emp where deptno != 10union allselect * from emp where ename = 'WARD';select * from v;mysql> create view v -&gt

2020-09-02 09:29:53 125

原创 MySQL MGR 联机配置

文章目录一.配置组复制模式1.1 单主模式1.2 多主模式1.3 联机配置组复制模式1.3.1 单主模式下修改主服务器1.3.2 单主修改为多主1.3.3 多主修改为单主1.4 配置并发写实例数1.5 设置组的通信协议版本二.保证数据一致性2.1 组复制数据一致性简介2.1.1 只读保护2.1.2 主库故障转移2.2 一致性级别介绍2.2.1 EVENTUAL(缺省值)2.2.2 BEFORE_ON_PRIMARY_FAILOVER2.2.3 BEFORE(读时同步)2.2.4 AFTER(写时同步)2.2

2020-09-02 09:26:02 72

原创 MySQL根据数据项的键排序

备注:测试数据库版本为MySQL 8.0如需要scott用户下建表及录入数据语句,可参考:scott建表及录入数据sql脚本问题:要根据某些条件逻辑来排序。例如,如果JOB是“SALESMAN”,要根据COMM来排序。否则,根据SAL排序。解决方案:在ORDER BY 子句中使用CASE表达式:select ename,sal,job,comm from emporder by case when job = 'SALESMAN' then comm else sal end;m

2020-09-01 11:42:42 23

原创 MySQL MHA高可用实战

文章目录一.MHA简介二.MHA搭建2.1 基本环境2.2 配置主从2.3 安装Perl等依赖模块2.4 配置SSH登录无密码验证2.5 安装MHA Node2.6 安装MHA Manager2.7 配置MHA2.8 创建相关脚本2.8.1 创建定期清理relay脚本2.8.2 创建自动failover脚本2.8.3 创建手动failover脚本三.检查MHA配置3.1 检查SSH配置3.2 检查整个复制环境状况3.3 检查MHA Manager的状态3.4 查看启动日志四.功能测试4.1 初始绑定VIP4

2020-09-01 08:41:35 95

原创 MySQL从表中随机返回n行数据

备注:测试数据库版本为MySQL 8.0如需要scott用户下建表及录入数据语句,可参考:scott建表及录入数据sql脚本问题:从表中随机返回n条记录。可以修改下面的语句,要求下次执行时产生不同的结果集。select ename,job from emp;mysql> select ename,job from emp;+--------+-----------+| ename | job |+--------+-----------+| SMITH | CLE

2020-08-31 15:13:57 36

原创 MySQL主从高可用之Keepalived

文章目录前言一.环境准备二.Keepalived安装三.主从配置文件3.1 keepalived配置文件3.2 keepalived配置文件参数介绍3.3 检查及启停脚本3.4 启动keepalived四.测试4.1 通过vip远程登录mysql4.2 模拟mysql 主库 crash4.3 切换后的处理参考文献前言MySQL配置主从后,从库作为容灾或只读库使用,如果主库宕机,需要DBA手工执行主从切换,然后通知应用层修改数据库配置。宕机时间长,需要人工干预,严重影响用户的使用。keepalived

2020-08-31 09:19:08 72

原创 MySQL 二进制日志binlog介绍

测试环境:centos 6.4MySQL 5.6.37文章目录一.MySQl binlog介绍1.1 binlog的作用1.2 binlog的位置1.3 binlog相关参数1.4 binlog格式1.5 清理binlog1.6 binlog和redo的区别二.MySQl binlog恢复2.1 语句级别的恢复2.2 row格式的恢复参考文献:一.MySQl binlog介绍1.1 binlog的作用逻辑日志,记录的是数据库内部的所有变动(sql语句 行的改变)server层日志,binlo

2020-08-28 10:37:38 78

空空如也

空空如也

空空如也
提示
确定要删除当前文章?
取消 删除