oracle判断数据出现交叉,Oracle!你必须要知道的Knowledge points(一)

一、入门

oracle有四个用户,分别为sys、system、sysman和scott,其中sys是oracle权限最高的用户,类似于Linux

系统的root,scott是示例用户,上课就以这个用户里的三张员工表empno、dept、salgrade作为示例来授课。

启动服务

1. 快捷键ctrl+alt+del打开任务管理器

2. 选择服务

3. 启动OracleServiceXXXX(XXXX是全局名字)和oracleXXXXXXXListener服务(选中一个按o快速找到哦)

这个非常重要(!important),没有启动一切免谈(记笔记.....)

验证数据库是否创建成功

win+R+cmd打开windows命令行控制台(小黑窗)

C:\User\PC>sqlplus /nolog

若出现SQL>则证明数据库创建成功

登陆

语法格式:conn[ect] 用户名/口令 [AS SYSDBA | AS SYSOPER]

注:中括号表示可以省略

登陆sys用户

conn /as sysdba(用户名和口令都为空)

只能以“sysdba”或者“sysoper”系统身份登录 ,不能用 normal。

登陆scott用户

刚开始scott用户默认被锁定,需要登陆sys用户之后执行alter user scott account unlock;

并重新设置口令即可登陆,默认口令是tiger

登陆:conn scott/tiger(password)

虚表

虚表不是真实存在的表,只有一个字段和一行记录,当需要查询且不想从已存在的表中获取数据时便可以使用虚表,更详细的解释你可以百度一下。

二、基础

结构查询语言的分类

考试好像一直考,应该蛮重要的吧。

aa54f364dac30216f739b3a4a91c07a8.png

SQL相关概念和规则

子句:关键字加其他语法元素,例如,select * 是一个子句,from table是一个子句。

列别名:列名 as 列别名 or 列名 列别名,需要注意的是若包含空格、需区分大写以及含特殊字符时,需加引号

关键字通常使用大写,其他语法元素小写,通常以子句为单位进行分行。

NULL

空值是一种无效的、未被赋值的、未知的或不可用的值。任何包含空值的算术表达式运算结果均为空值。(这一点需要注意)

处理空值的函数

nvl(comm,0):若comm不为空,就返回comm,否则返回0

nvl2(expr1,expr2,0):若expr1不为空,就返回expr2,否则返回0

NULLIF(expr1,expr2):数据类型需一致,相等返回null,否则返回第一个表达式

coalesce(expr1,expr2,...)返回第一个非空参数,数据类型需一致

特殊运算符

between and 判断要比较的值是否在某个范围内。 eg: sal [not] between 1500 and 2000

in 判断要比较的值是否和集合列表中的任何一个值相等。 eg: sal [not] in (1500,1600,1800)

like 判断要比较的值是否满足部分匹配。 eg: ename [not] like '%T_' 注:'%'代表任意多字符(>=0),下划线代表一个任意字符

is null 判断要比较的值是否为空值NULL 。 eg: where comm is [not] null

运算符优先级

()、算术运算符(+-*/)、连接运算符(||)、比较运算符(<> 不等于)、特殊比较运算符(like、in、between and、is null)、逻辑运算符(not>and>or)

消除重复行

在select字句中使用关键字DISTINCT可消除重复行。

eg :select distinct deptno from emp;

原义字符串和连接运算符

原义字符串

原义字符串是包含在SELECT列表中的一个字符、一个数字或一个日期。

日期和字符字面值必须用单引号引起来。

每个原义字符串都会在每个数据行输出中出现。

连接操作符

用于连接列与列、列和字符

形式上是以两个竖杠||

用于创建字符表达式的结果列

显示表结构

打开plsqldev(红色油桶),打开Command Window,或者在windows控制台上操作也行。

SQL>desc tablename;

SQL六个常用的执行语句

select*

from table

where condition

group by column

having condition

order by column [asc|desc] asc升序,desc是降序

执行顺序:from > where > group by > having > select > order by

三、函数

单行函数

1. 单行函数返回一个结果

2. 支持嵌套

3. 单行函数可以放在select、where、order by子句中

4. 单行函数对单行数据操作

字符函数(大小写转换函数和字符处理函数)

* lower(列名|表达式):将大写或大小写混合的字符转换成小写

* upper(列名|表达式) :将小写或大小写混合的字符转换成大写

* initcap(列名|表达式) :将每个单词的第一个字母转换成大写,其余的字母都转换成小写(这个不要漏了哦)

* concat(列名1,列名2):连接两个字段或表达式,类似于||

* substr(列名|表达式,n1,n2):返回第一个参数中,从第n1位开始, 长度为n2的子串 。

* length(column | expression):取字符长度

* instr(s1,s2,[,n1],[n2]) :返回s1中,子串s2从n1开始,第n2次出现的位置。n1,n2默认值为1

* lpad(s1,n1,s2):返回s1被s2从左面填充到n1长度后的字符串 。

* rpad(s1,n1,s2) :返回s1被s2从右面填充到n1长度后的字符串。

* trim:去除字符串头部或尾部(头尾)的字符

格式:TRIM([leading | trailing | both] character from source) 注意第一个参数和from

* replace(s1,s2,s3) : 把s1中的s2用s3替换。注意谁替换谁

用的比较多的是concat()、substr()、instr()、length()

数值函数

round(num,n):将num四舍五入到小数点后n位

trunc(num,n):将num截取到小数点后n位

mod(num,n):取num对n取余

日期函数

日期函数默认格式是DD-MM-RR,SYSDATE是系统当前时间

日期可直接加减数值,表示加减对应天数,两个日期相减之后得到相隔的天数,除以7是week,除以24是hour,可以转化成相应单位进行相加减

看图判断年份

RR 日期格式:用来判定按照DD-MM-RR格式给定的日期实际代表的日期是多少

aa6f25d43ba624062580bee00cc12e3e.png

从第一个表可以看出YY格式的年份和当前的年份属于同一个世纪,不用做任何判断。

RR格式的年份判断规律:同小同大均为当前世纪,前小后大为上世纪,前大后小为下个世纪

1.当前日期为2015年,指定日期格式为DD-MON-RR,指定日期为01-1月-01,该日期实际所代表的日期为?

当前日期为小,指定日期为小,所以当前日期是2001年(当前世纪)

2.当前日期为2015年,指定日期格式为DD-MON-RR,指定日期为01-1月-95,该日期实际所代表的日期为?

当前日期为小,指定日期为大,所以实际日期是1995年(上个世纪)

3.当前日期为1998年,指定日期格式为DD-MON-RR,指定日期为01-1月-95,该日期实际所代表的日期为?

当前日期为大,指定日期为大,所以实际日期是1995年(当前世纪)

4.当前日期为1998年,指定日期格式为DD-MON-RR,指定日期为01-1月-01,该日期实际所代表的日期为?

当前日期为大,指定日期为小,所以实际日期是2001年(下个世纪)

months_between(sysdate,hiredate):返回两个日期类型数据之间间隔的自然月数

select ename,job,months_between(sysdate,hiredate) months --当前系统时间与入职时间的间隔月数

from emp

order by months

add_months(sysdate,n):返回指定日期加上n个月后的日期

select empno,ename,job,add_months(hiredate,3) date --入职三个月后的日期

from emp

next_day:返回某一日期的下一个指定日期(有点绕,结合例子来看就懂了)

select next_day(sysdate,'星期一') NextMonday --下个周一是什么日期

from dual; --虚表

last_day:返回指定日期当月的最后一天的日期

select last_day(sysdate) LastDay from dual; --这个月的最后一天是什么日期

round(sysdate[,'format']):将date按format格式进行四舍五入,默认四舍五入为最近的天

format:世纪CC,年YY,月MM,日DD,小时HH24,分MI,秒SS(这个需要稍微记一下)

select ename,job,round(hiredate,'MONTH') --入职日期按月四舍五入

from emp;

trunc(sysdate[,format]):将date按format格式进行截断,和round差不多

--查询81年入职的员工姓名,入职日期按月截断的日期。

select ename,trunc(hiredate,'MONTH')

from emp

where substr(hiredate,-2,2) = '81';

extract([YEAR | MONTH | DAY] from date):返回日期类型数据中的年份、月份和日期

--部门编号是10的部门中所有员工入职月份。

select extract(month from hiredate) from emp;

转换函数

通常需要在字符类型、日期类型、数值类型之间进行显式转换,转换函数及对应关系如下图所示。

ef26cfcd0062450fe015a6ab97f43a60.png

to_char(data,'format'):用于日期型

需要注意的是format大小写敏感,可通过format提取日期的年or月or日

下面表格的内容可以稍微记一下

686401c7db74c8e2a4b61076588560b8.png

select empno,ename,job,to_char(hiredate,'DD MONTH YYYY') hiredate --17 November 1981

from emp;

to_char(number,'format'):用于数值型

14cd4e9dae8b4b32d56c9cd90f444c5f.png

select to_char(sal,'$99,999') salary

from emp;

to_number(char,'format'):要转换的char类型数据必须是由数字组成的字符串。

to_date(char,'format'):要转换的char类型数据必须是可以转换成日期的字符。

select to_date('2019-1-10','YYYY-MM-DD') from dual;

通用函数

case函数

select ename,deptno,

(case deptno

when 10 then '销售部'

when 20 then '技术部'

when 30 then '后勤部'

else '无'

end) deptname,

from emp;

decode函数

select ename,deptno,

decode(deptno,

10, '销售部',

20,'技术部',

30,'后勤部',

'无') deptname,

from emp;

多行函数

分组函数

分组函数是对表中一组记录进行操作,每组只返回一个结果,即首先要对表记录进行分组,然后再进行操作汇总,每组返

回一个结果,分组时可能是整个表分为一组,也可能根据条件分成多组。

a4e085671ea105b6392da34836453225.png

min(column):返回每组的最小值,适用于任何类型的数据

max(column):返回每组的最大值,适用于任何类型的数据

avg(column):返回每组的平均值,只能够对数值类型的列或表达式操作

sum(column):返回每组的总和,只能够对数值类型的列或表达式操作

count(column):返回满足条件的每组记录条数

查询职位以SALES开头的所有员工平均工资、最低工资、最高工资、工资和。

select avg(sal),min(sal),max(sal),sum(sal)

from emp

where job like 'SALES%';

组函数中DISTINCT

DISTINCT会消除重复记录后再使用组函数

select count(distinct deptno) from dept;

分组函数中空值处理

除了count(*)之外,其它所有分组函数都会忽略列中的空值,然后再进行计算。

select avg(comm) from emp; --avg(comm) 500

在分组函数中使用NVL 函数可以使分组函数强制包含含有空值的记录

select avg(nvl(comm,0)) from emp; --avg(nvl(comm,0)) ---157

4f88a2439c0a05627ee8dc49b151bc8f.png

需要注意的几点

select 子句中出现的除分组函数之外的列都应写在group by子句中

分组函数的筛选判断放在having子句中,不能放在where子句中

上面这个图很重要,多看几遍

多表连接

多表连接指的是在多个表之间通过一定的连接条件,使表之间发生关联,进而能从多个表之间获取数据

语法格式

SELECT table1.column, table2.column

FROM table1, table2

WHERE table1.column1 = table2.column2;

三点要求

* 在 WHERE子句中书写连接条件。

* 如果在多个表中出现相同的列名,则需要使用表名(或表别名)作为来自该表的列名的前缀。

* N个表相连时,至少需要N-1个连接条件。

最后一个条件需要特别注意一下

笛卡尔积

什么是笛卡尔积

第一个表中的所有行和第二个表中的所有行都发生连接。

什么时候会产生笛卡尔积

连接条件被省略或者无效时,简而言之,就是没有连接条件。

如何避免笛卡尔积

在where子句中包含有效的连接条件

当from后面有多个表时,无论题意如何,连接条件一定要有,且需要N-1个(N为表的数量)

等值连接

两个部门有相同的列,即可用等值连接,而且大概率会是用等值连接

select empno,ename,job,dname,loc

from emp,dept

where emp.deptno = dept.deptno;

非等值连接

两个表不存在相同的列,但两个表的列存在某种不可告人的关系

select ename,job,grade

from emp,salgrade

where sal between losal and hisal;--losal最低工资 hisal最高工资

自身连接

自身连接即自己跟自己连接,以别名区别

查询每个员工的姓名和直接上级姓名?

SELECT worker.ename||' leader is '||manager.ename

FROM emp worker, emp manager

WHERE worker.mgr = manager.empno;

外部连接

在两个表进行等值连接时,有些记录按照连接条件没有连接上,可在缺少匹配值的一边加上(+)

语法

6173e967db8f261e8d82f5fa51e7069a.png

符号(+)所在边的表增加一个“万能”的行,这个行全部由空值组成。它可以和另一边的表中所有不满足连接条件的行进行连接。

由于这个“万能”行的各列全部是空值,因此在连接结果中,来自“万能”行属性值全部为空值。

多表连接的写法

分析要查询的列都来自于哪些表,构成FROM子句;

分析这些表之间的关联关系,如果表之间没有直接关联关系,而是通过另一个中间表关联,则也要在FROM子句中补充中间关联表;

接下来在WHERE子句中补充表之间的关联关系,通常N个表,至少要有N-1个关联关系;

分析是否还有其它限制条件,补充到WHERE子句的表关联关系之后,作为限制条件;

根据用户想要显示的信息,补充SELECT子句。

分析是否有排序要求,如果排序要求中还涉及到其它表,则也要进行第2步补充排序字段所在的表,并且添加表之间的关联关系;

表别名

在多表连接且有相同列时,使用表别名可以区分来自不同表但是名字相同的列。

在定义表别名之后,在对列进行限制时,只能使用表别名,不能使用表名。

SQL:1999语法的连接

语法

2e10757125c333aa74eeff6d283e5b0b.png

这张图包含了SQL99所有连接方式的语法,看完后面的再来看这个表就不会一脸懵逼了

交叉连接

交叉连接是两个表进行交叉相乘,和笛卡尔积的效果一样,使用cross join子句。

SELECT emp.empno,emp.ename,emp.sal,emp.deptno,dept.loc

FROM emp

CROSS JOIN dept;

自然连接

自然连接类似于等值连接,对两个表之间所有相同名字和数据类型的列进行等值连接,使用natural join子句连接。

SELECT empno,ename,sal,deptno,loc

FROM emp

NATURAL JOIN dept;

USING子句

自然连接是使用所有名称和数据类型相匹配的列作为连接条件,而USING子句可以指定用某个或某几个相同名字和数据类型的列作为连接条件。

SELECT e.ename,e.ename,e.sal,deptno,d.loc

FROM emp e JOIN dept d USING (deptno)

WHERE deptno = 20 ;

使用USING子句创建连接时,应注意以下几点:

如果有若干个列名称相同但数据类型不同,自然连接子句可以用USING子句来替换,以指定产生等值连接的列。

如果有多于一个列都匹配的情况,使用USING子句只能指定其中的一列。

USING子句中的用到的列不能使用表名和别名作为前缀。

NATURAL JOIN子句和USING子句是相互排斥的,不能同时使用。

ON子句

自然连接条件基本上是具有相同列名的表之间的等值连接

如果要指定任意连接条件,或指定要连接的列,则可以使用ON子句;

用ON将连接条件和其它检索条件分隔开,其它检索条件写在WHERE子句;

ON子句可以提高代码的可读性。

code

SELECT e.empno, e.ename, e.deptno, d.deptno, d.loc

FROM emp e

JOIN dept d

ON (e.deptno = d.deptno); --我觉得很像where

左外连接

左外连接以FROM子句中的左边表为基表,该表所有行数据按照连接条件无论是否与右边表能匹配上,都会被显示出来,是不是觉得很像外部连接。

SELECT e.ename,e.deptno,d.loc

FROM emp e

LEFT OUTER JOIN dept d

ON (e.deptno = d.deptno);

右外连接

右外连接以FROM子句中的右边表为基表,该表所有行数据按照连接条件无论是否与左边表能匹配上,都会被显示出来。

SELECT e.ename,e.deptno,d.loc

FROM emp e

RIGHT OUTER JOIN dept d

ON (e.deptno = d.deptno);

全外连接

返回两个表等值连接结果,以及两个表中所有等值连接失败的记录

SELECT e.ename,e.deptno,d.loc

FROM emp e

FULL OUTER JOIN dept d

ON (e.deptno = d.deptno);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/529816.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php上传中文图片,用PHP处理图片文件的上传

这篇文章主要介绍了关于用PHP处理图片文件的上传&#xff0c;有着一定的参考价值&#xff0c;现在分享给大家&#xff0c;有需要的朋友可以参考一下1.html文件form表单注意。enctype属性代码&#xff1a;<?php require(../../public/common/config.php);$sqlClass "s…

linux中的进程权限是,Linux中权限,进程,服务的简单操作

1.权限存在意义- rw-r-r-r-- 1 root root 216 May 12 2017 /mnt/rht[1] [2] [3] [4] [5] [6] [7] [8][1] 文件类型-普通文件d目录l软链接ssocketc文件权限[2] 文件权限rw-|r--|r--u g ouuserggroupoo…

linux 运行eclipse,解决Linux下Eclipse启动错误

下载Eclipse后一打开就报错&#xff1a;JVM terminated. Exit code-1-Xms40m-Xmx256m-XX:MaxPermSize256m-Djava.class.path/usr/local/eclipse/plugins/org.eclipse.equinox.launcher_1.0.201.R35x_v20090715.jar-os linux-ws gtk-arch x86-showsplash /usr/local/eclipse//pl…

c语言stm32串口控制单片机,实用STM32的串口控制平台的实现

假设我要编写一个自己的指令脚本&#xff0c; 来读取MCU的关键信息&#xff0c;关键字为mcu&#xff0c; 文件命名为shell_mcu.c&#xff1b; 当输入“mcu rd 0”时显示MCU的FLASH大小&#xff0c;输入“mcu rd 1”时读取MCU的唯一ID信息。shell_mcu.c源代码&#xff1a;/*****…

time_t c语言 2038,什么是2038问题?

什么是2038问题不知道你有没有听过2038问题?无论你是否听过&#xff0c;本文将带你认识什么是2038问题。Unix时间戳定义为从格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。而在C语言中&#xff0c;常用time_t来表示。举个例子…

c 语言 readline,如何用C实现一个readLine()函数- 该函数每次读入文本文件的一行并打印到屏幕...

如何用C实现一个readLine()函数- 该函数每次读入文本文件的一行并打印到屏幕(2012-04-13 00:23:41)标签&#xff1a;打印文本文件如何杂谈如何用C实现一个readLine()函数? 该函数每次读入文本文件的一行并打印到屏幕以前看到过这方面的讨论http://bbs.chinaunix.net/viewthrea…

c4droid语言游戏,c4droid手机编程软件下载

c4droid可以说是手机端最好的编程软件&#xff0c;没有之一&#xff0c;软件可以帮助大家在手机上进行编写C代码,让各位程序员们随时随地都能编程。操纵简单&#xff0c;功能强大。c4droid软件介绍c4droid是款Android设备上的C/C程序编译器&#xff0c;默认以tcc(tiny c compil…

创业冲突的五种解决方法是_不会说话,不懂处理人际冲突怎么办?《沟通的艺术》5步教会你...

关注“夏娃蓝空间”&#xff0c;陪你成长为更好的自己。想要良好地解决冲突&#xff0c;一定要有“这是我们两个人共同的事”的态度。今年夏天最热门的电视剧非《三十而已》莫属了&#xff0c;而撑起了这部剧的流量的广大观众&#xff0c;基本都是集中在逐步靠近中青年阶段的90…

android gsensor 坐标,MTK Android G sensor 原理,配置,调试

原理图&#xff1a;g_sensor的驱动目录在mediatek/custom/common/kernel/accelerometer下。一、g_sensor 的移植步骤1、在ProjectConfig.mk中配置相关的g_sensor例如 CUSTOM_KERNEL_ACCELEROMETER kxtf92、在mediatek/custom/common/kernel/accelerometer目录中添加 g_sensor的…

网贷大数据什么时候会好_如果人类把地球钻穿了,会发生什么?大数据分析告诉你多可怕...

很多科研人员在做实验的时候&#xff0c;少不了被旁人嘲笑或者蔑视的情况&#xff0c;因为常人往往是无法理解他们的想法的。例如曾经就有科研人员想要对地球进行钻探&#xff0c;看看能够在地表上钻多深&#xff0c;是否能够将地球给钻穿了。很多人都会认为这种做法没有意义而…

android h5 有广告,那些H5在Android上显示的丧心病狂的坑

首先得强调一下&#xff0c;H5和移动设备的交互遇到的问题真的是各种丧心病狂&#xff01;&#xff01;但是本主依然还是耐着极大的兴致(无奈)的做了下去。H5页面在Android或者IOS上运行出现问题(这里的运行指的是h5的页面运行在App里的webview里)&#xff0c;测试人员或者上级…

小米9android q测试版,基于Android Q的MIUI来了 小米9尝鲜

01基于Android Q的MIUI来了中关村在线消息&#xff1a;谷歌在今年五月份发布了最新的Android Q系统&#xff0c;虽然很多国产手机还没有升级到Android P&#xff0c;但是还是有不少厂家开始对旗下的手机升级到最新的Android Q系统&#xff0c;根据小米最新的官方的消息&#xf…

android layerlist bitmap,android shape类似的 另一个 高端用法:layer-list

android shape类似的 另一个 高端用法&#xff1a;layer-list&#xff1a;简介&#xff1a;将多个图片或上面两种效果按照顺序层叠起来” 《?xml version"1.0" encoding"utf-8"?>《layer-listxmlns:android"http://schemas.android.com/apk/res/…

nedc和epa续航里程什么意思_400公里已成续航新起点,纯电动车的实用性到底怎样...

对于购买纯电动汽车的用户来说&#xff0c;续航里程是非常重要的参考因素&#xff0c;毕竟如果续航里程太短&#xff0c;实用性将会大打折扣&#xff0c;跑个长途都心惊胆战的&#xff0c;生怕路上遇到堵车了、没电了、中途没有加油站之类的。就算是不考虑长途&#xff0c;市区…

java class类_关于创建java中的class类的对象的方法

1.由于Class类没有公共构造方法&#xff0c;所有创建Class的对象的方法有以下几种&#xff1a;①通过Class.forName()静态方法返回Class类的一个实例Class cls Class.forName("test.dog - 这个网站可出售。 - 最佳的test 来源和相关信息。");②通过类名.class来获取…

linux 正则查找email_Hello Iris简易微博类App开发教程3-查找用户和用户登录

用户邮箱地址有效性验证在上一节中&#xff0c;我们编写了用于用户注册的代码。但是当时并没有为用户的Email添加有效性验证&#xff0c;导致Email被设置为任何字符串都能注册成功。所以在本节初&#xff0c;我们首先来为Email添加一个有效性验证。首先还是来编写测试数据&…

原生的html组件,如何创建HTML5与原生UI组件混合的移动应用程序

本文将介绍如何使用Trigger.io创建原生的顶部栏、标签栏、以及HTML/CSS/JavaScript的混合型移动应用程序。以后我们将添加更多的原生UI组件到Trigger.io&#xff0c;但现在你只需要使用web技术就可以在IOS和Android上创建漂亮而流畅的移动应用。这是一个简单的菜谱应用程序的屏…

c语言不会可以学好java吗_有人说学了C语言,两天就能学会Java,两个星期就可以找工作?...

作为一个过来人来说&#xff0c;编程如果真的那么简单就不会导致现在各大公司还喊着招不到人的情况了&#xff0c;虽然编程领域里面有触类旁通的说法&#xff0c;但这个说法只是针对于对于一种编程已经掌握到一定程度了&#xff0c;不是简单的学过或者做过就可以轻松的转向别的…

wps合并所有sheet页_WPS里面如何批量打印(WPS2019)

WPS里面如何批量打印&#xff08;WPS2019&#xff09;分四步&#xff1a;1. 创建WPS表格获奖名单2. 创建WPS文字的获奖模板3. 将WPS表格名单内容调入到WPS文字奖状模板中4. 批量打印&#xff08;或保存&#xff09;&#xff08;注&#xff1a;我在这里用了别人的office版本的表…

keepalived mysql双主架构图_基于MySQL双主的高可用解决方案理论及实践

MySQL在互联网应用中已经遍地开花&#xff0c;但是在银行系统中&#xff0c;还在生根发芽的阶段。本文记录的是根据某生产系统实际需求&#xff0c;对数据库高可用方案从需求、各高可用技术特点对比、实施、测试等过程进行整理&#xff0c;完善Mysql高可用方案&#xff0c;同时…