关于mysql的知识体系

关系型数据库(二维表)

常用的SQL命令分类

  • 管理数据库使用SQL(结构化查询语言)

  • DDL 数据定义语言 如:CREATE、ALTER、DROP

  • DML 数据操作语言 如:INSERT、UPDATE、DELETE

  • DCL 数据控制语言 如:GRANT、REVOKE

  • DTL 数据事务语言 如:COMMIT、ROLLBACK、SAVEPOINT

SQL命令使用规则

  • SQL命令不区分字母大小写(密码、变量值除外)

  • 每条SQL命令以;结束

  • 默认命令不支持Tab键自动补齐

  • \c 终止sql命令

MySQL基本操作

  • 可以创建多个库,通过库名区分

  • SHOW DATABASES; #显示已有的库

  • SELECT USER( ); #显示连接用户

  • USE 库名; #切换库

  • SELECT DATABASE( ); #显示当前所在的库

  • CREATE DATABASE 库名; #创建新库

  • SHOW TABLES; #显示已有的表

  • DROP DATABASE 库名; #删除库

  • 创建库

  • 库命名规则
    • 仅可以使用数字、字母、下划线、不能纯数字
    • 区分字母大小写,具有唯一性
    • 不可使用指令关键字、特殊字符
  • mysql> CREATE DATABASE  DB1;
  • 创建表

  • 格式
  • mysql> CREATE TABLE 库名.表名(字段名1  类型(宽度),字段名2  类型(宽度),……)DEFAULT CHARSET=utf8; 
  • 查看表结构

  • DESC 库名.表名;
  • mysql> DESC db1.stuinfo;
  • 数据类型

  • 定长 :CHAR(字符个数)
    • 最大字符个数255
    • 不够指定字符个数时在右边用空格补全
    • 字符个数超出时,无法写入数据。
  • 变长:VARCHAR(字符个数)
    • 按数据实际大小分配存储空间(0-65535)

    • 字符个数超出时,无法写入数据。

    • 大文本类型:text/blob

    • 字符数大于65535存储时使用

  • 数据类型

    时间函数

  • 函数服务内置的命令,可以使用时间函数给字段赋值
  • 类 型用 途
    CURTIME( )获取当前的系统时间"时:分:秒"部分
    CURDATE( )获取当前的系统时间"年-月-日"部分
    NOW( )获取当前系统时间"年-月-日 时:分:秒"
    YEAR(NOW())获取年
    MONTH(NOW( ))获取月
    DAY(NOW())获取日
    DATE(NOW())获取日期"年-月-日"
    TIME(NOW())获取时间"时:分:秒"

枚举类型

  • ENUM 单选
    • 格式:字段名 ENUM(值1, 值2, 值N)
    • 仅能在列表里选择一个值

创建db1.t5表,包含name字段 CHAR类型15个宽度,sex字段单选枚举类型("boy","girl","other")

mysql> CREATE TABLE db1.t5(-> name CHAR(15),-> sex ENUM("boy","girl","other")-> );

约束条件

  • NULL 允许为空(默认设置)
  • NOT NULL 不允许为空
  • KEY 键值类型
  • DEFAULT 设置默认值,缺省为NULL
  • EXTRA 额外设置

高级字段约束

主键

单列主键

复合主键

自增长

外键

  • 外键约束:保证数据的一致性,外键字段值必须在参考表中字段已有值里选择,一张表中可以有多个外键
  • 表存储引擎必须是innodb (在进阶课程里讲 现在仅需要知道如何指定表使用innodb存储引擎)
  • 外键表字段与被关联表字段类型要一致
  • 被参照字段必须要是索引类型的一种(通常是PRIMARY KEY)

数学计算

#包括+、-、*、/、%操作
#SELECT可以直接运行计算表达式
#也可以对表内已有的数据进行运算

流程控制函数

  • IF函数
#语法:IF(表达式,值1,值2)如果表达式为真,则返回值1,如果表达式为假,则返回值2

IFNULL函数

#语法:IFNULL(值1,值2)如果值1不为NULL(空)则返回值1,为NULL(空)则返回值2

CASE语句

#语法:用于多分支判断如果字段名等于某个值,则返回对应位置then后面的值并结束判断如果与所有值都不相等,则返回else后面的结果并结束判断	

综合练习

综合语法:


SELECT 查询字段列表

 

FROM 库名.表名

 

WHERE 筛选条件

 

GROUP BY 分组字段

 

HAVING 过滤字段

 

ORDER BY 排序字段

 

LIMIT 行数

连接查询语法

SELECT 字段列表 FROM 表1 AS 别名1 连接类型 JOIN 表2 AS 别名2 ON 连接条件 连接类型 JOIN ... 表n AS 别名n ON 连接条件 [WHERE 分组前筛选条件] [GROUP BY 分组字段] [HAVING 分组后筛选条件] [ORDER BY 排序字段] [LIMIT 显示行数]

笛卡尔积

笛卡尔乘积是指在数学中,两个集合XY的笛卡尔积(Cartesian product),又称直积,表示为X×Y,第一个对象是X的成员而第二个对象是Y的所有可能有序对的其中一个成员

​ 例如:X=(1,2), Y=(a,b) 则X×Y=((1,a),(1,b),(2,a),(2,b))

内连接(INNER)

  • 功能:将2张及以上的表格按照连接条件连接为1张新表(取符合连接条件的部分)

  • 语法

    #语法格式
    SELECT 字段列表
    FROM 
    表1 AS 别名1INNER JOIN
    表2 AS 别名2 连接条件INNER JOIN...
    表n AS 别名nON 连接条件
    [WHERE 分组前筛选条件 | GROUP BY 分组字段 | HAVING 分组后筛选条件 | ORDER BY 排序字段 | LIMITE 显示行数]#连接条件- 等值连接:连接条件是等值判断- 不等值连接:连接条件是不等值判断- 自连接:自己连接自己,把1张表当做2张表(使用时需定义别名)
  • 等值连接

  • 非等值连接
  • 自连接

外连接

连接类型关键字功能
左外连接LEFT  JOIN左边的表为主表
左边表的记录全都显示出来
右边的表只显示与条件匹配记录
右边表比左边表少的记录使用NULL匹配
右外连接RIGHT JOIN右边的表为主表
右边表的记录全都显示出来
左边的表只显示与条件匹配记录
左边表比右边表少的记录使用NULL匹配
全外连接UNION [ALL]也称联合查询
用来一起输出多个select查询结果
要求查询时多个select语句查看的字段个数必须一致
UNION关键字默认去重,可以使用UNION ALL包含重复项
  • 左外连接
#语法SELECT  字段列表 FROM表1 AS 别名1LEFT JOIN表2 AS 别名2ON  连接条件[WHERE 筛选条件] | [GROUP BY 分组] | [HAVING 分组后筛选]|[ORDER BY 排序]|[LIMIT 行数]
  • 右外连接
#语法SELECT  字段列表 FROM表1 AS 别名1RIGHT JOIN表2 AS 别名2ON  连接条件[WHERE 筛选条件] | [GROUP BY 分组] | [HAVING 分组后筛选]|[ORDER BY 排序]|[LIMIT 行数]
  • 全外连接
#语法:(SELECT语句 ) UNION (SELECT语句);			#去除重复结果(SELECT语句 ) UNION  ALL (SELECT语句);		#保留重复结果


​​​​​​左外连接 UNION 右外连接 实现全外连接

子查询

如下,把要得出结果的句子直接用()括起来

SELECT d.dept_id,d.dept_name,(SELECT COUNT(e.name) FROM employees AS e WHERE e.dept_id=d.dept_id) AS 人数 FROM departments AS d;

为什么需要备份数据?

如果我们把数据只存储在一个地方,如果物理机器损坏,会导致数据丢失,无法恢复。 还有就是我们每次手动修改线上数据之前,为了安全起见,都需要先备份数据。防止人为的误操作,导致弄脏数据或弄丢数据。

逻辑备份

逻辑备份是备份sql语句,在恢复的时候执行备份的sql语句实现数据库数据的重现。

mysqldump命令

参数缩写含义
--host-h服务器IP地址
--port-P服务器端口号
--user-uMySQL 用户名
--pasword-pMySQL 密码
--databases-B指定要备份的多个数据库,会添加建库语句
--all-databases-A备份mysql服务器上的所有数据库,会添加建库语句
--add-drop-database在建库语句前添加删库语句
--compact压缩模式,产生更少的输出
--comments添加注释信息
--complete-insert输出完成的插入语句
--lock-tables备份前,锁定所有数据库表
--no-create-db/--no-create-info禁止生成创建数据库语句
--force当出现错误时仍然继续备份操作
--default-character-set指定默认字符集
--add-locks备份数据库表时锁定数据库表
--single-transaction保证数据的一致性和服务的可用性
--master-data=1通常等于1,记录binlog日志位置与文件名,追加至备份文件中
--fush-logs-F备份之前刷新日志
--events-E备份事件调度器代码
--triggers-T备份触发器
--routines-R备份存储过程和存储函

备份

备份所有数据库:

[root@localhost ~]# mkdir -p /backup/mysqldump
[root@localhost ~]# mysqldump -uroot -p --all-databases >/backup/mysqldump/all.sql

备份指定数据库:

[root@localhost ~]# mysqldump -uroot -p test >/backup/mysqldump/test.sql

备份指定数据库指定表(多个表以空格间隔)

[root@localhost ~]# mysqldump -uroot -p test tb1 tb2 >/backup/mysqldump/tables.sql

备份指定数据库排除某些表

[root@localhost ~]# mysqldump -uroot -p test --ignore-table=test.tb1 --ignore-table=test.tb2 >/backup/mysqldump/test2.sql

全量备份+增量备份

全量备份后,数据库中的新数据依靠数据库本身的日志进行恢复。 导入时,先导入全量备份数据,在从数据库日志导入增量数据。

备份总结:

冷备份: 停机,复制数据文件

热备份: 不停机备份

逻辑备份: mysqldump,将数据备份出来生成sql脚本

物理备份: 直接复制数据文件 冷备(cp) 热备(xtrabackup)

全量备份: 备份全部数据 mysqldump逻辑备份 xtrabackup物理备份

增量备份: mysqldump + 二进制日志 xtrabackup直接做增量备份,再合并到全量备份中

什么是MySQL主从同步?

“主”指的是MySQL主服务器(master),负责写请求。“从”指的是MySQL从服务器(slave),负责读请求。主从同步指的是将主服务器上的数据同步至从服务器。

为什么需要主从同步?

针对大流量,一台服务器已经不能满足要求。这个时候往往是将MySQL集群部署,但是这样会存在数据一致性的问题,即客户端相同的请求,访问不同的节点,如何能够得到相同的访问结果。通常的部署架构有一主多从和多主多从。

一主多从,主服务器负责写请求,从服务器负责读请求,从服务器的数据同步自主服务器。每台服务器都拥有所有的数据,因此可以解决数据一致性问题。使用多台服务器共同来处理请求,也达到了负责均衡的效果,之所以从服务器比主服务器多,原因是实际生产中,读请求远多于写请求。

多主多从,一主多从在业务量大的时候,主库的写入速度就会成为性能瓶颈。这个时候可以使用分库分表,让数据分布在多个master中,每个master又有多个从库,负责写请求。那么client端在请求数据时,怎么知道数据在哪个节点上呢?对于分库分表,每个表都会有一个字段作为分库键,中间件(比如MyCat)在查询时会根据分库键计算出数据在哪一个库上。

 

为什么要读写分离

面对越来越大的访问压力,单台的服务器性能成为瓶颈,需要分担负载。 因为数据库的“写”(写10000条数据可能要3分钟)操作是比较耗时的。 但是数据库的“读”(读10000条数据可能只要5秒钟)。 所以读写分离,解决的是,数据库的写入,影响了查询的效率。

什么时候要读写分离

数据库不一定要读写分离,如果程序使用数据库较多时,而更新少,查询多的情况下会考虑使用。利用数据库主从同步,再通过读写分离可以分担数据库压力,提高性能。

读写分离

读写分离解决的是,数据库的写操作,影响了查询的效率,适用于读远大于写的场景。读写分离的实现基础是主从复制,主数据库利用主从复制将自身数据的改变同步到从数据库集群中,然后主数据库负责处理写操作(当然也可以执行读操作),从数据库负责处理读操作,不能执行写操作。并可以根据压力情况,部署多个从数据库提高读操作的速度,减少主数据库的压力,提高系统总体的性能。

读写分离提高性能的原因:

(1)增加物理服务器,负荷分摊;

假如我们有1主3从,假设现在1分钟内有10条写入,150条读取。那么,1主3从相当于共计40条写入,而读取总数没变,因此平均下来每台服务器承担了10条写入和50条读取(主库不承担读取操作)。因此,虽然写入没变,但是读取大大分摊了,提高了系统性能。另外,当读取被分摊后,又间接提高了写入的性能。所以,总体性能提高了,也就是拿机器和带宽换性能。

(2)主从只负责各自的写和读,极大程度的缓解锁争用;

(3)从库可配置MyISAM引擎,提升查询性能以及节约系统开销;

(4)主从复制另外一大功能是增加冗余,提高可用性,当一台数据库服务器宕机后能通过调整另外一台从库来以最快的速度恢复服务。

主从复制与读写分离

在实际的生产环境中,对数据库的读和写都在同一个数据库服务器中,是不能满足实际需求的。无论是在安全性、高可用性还是高并发等各个方面都是完全不能满足实际需求的。

因此,通过主从复制的方式来同步数据,再通过读写分离来提升数据库的并发负载能力。而mysql主从复制是对数据库中的数据、语句做备份。

最大规模

MaxScale 是干什么的?

配置好了 MySQL 的主从复制结构后,我们希望实现读写分离,把读操作分散到从服务器中,并且对多个从服务器能实现负载均衡。 读写分离和负载均衡 是MySQL集群的基础需求,MaxScale 就可以帮着我们方便的实现这些功能。

MaxScale 的基础构成

MaxScale 是MySQL的兄弟公司 MariaDB 开发的,现在已经发展得非常成熟。MaxScale 是插件式结构,允许用户开发适合自己的插件。

从模板机克隆一台新机器安装maxscale

总结过程

初始化数据库-》主机配置srever-id和log-bin-》uuid-》从机配置server-id和log-bin

从机uuid重新生成-》重启从机-》master配置-》slave配置——》验证

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

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

相关文章

[python]python实现对jenkins 的任务触发

目录 关键词平台说明背景一、安装 python-jenkins 库二、code三、运行 Python 脚本四、注意事项 关键词 python、excel、DBC、jenkins 平台说明 项目Valuepython版本3.6 背景 用python实现对jenkins 的任务触发。 一、安装 python-jenkins 库 pip install python-jenkin…

论文解读:Informer-AAAI2021年最佳论文

论文背景 应用背景 训练的是历史数据,但预测的是未来的数据,但是历史数据和未来数据的分布不一定是一样的,所以时间序列应用于股票预测往往不太稳定 动作预测: 基于之前的视频中每一帧动作,预测下一帧这个人要做什么…

Ubuntu 常用命令之 echo 命令用法介绍

📑Linux/Ubuntu 常用命令归类整理 echo 是一个在 Ubuntu 系统下常用的命令,主要用于在终端输出字符串或者变量。 echo 的基本语法 echo [option] [string]echo 命令的参数包括 -n:不输出结尾的换行符。-e:启用反斜杠转义字符。…

超级逼真人脸生成,Stable Diffusion的3个关键技巧

大家好,你是否曾想过,为什么别人可以使用AI图像生成技术生成如此逼真的人脸,而自己的尝试却充满了错误和瑕疵,让人一眼看出是假的。尝试过调整提示和设置,但似乎仍无法与他人的质量相匹配。 本文将带大家了解使用Stab…

LeetCode-17 电话号码的字母组合

LeetCode-17 电话号码的字母组合 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。 示例 1: 输入:d…

医保dip质控系统如何实现医保控费?

医保DIP质控系统通过数据分析和监管手段实现医保控费的目标。下面是一些常见的实现方式: 医疗服务审核:系统对医疗机构提供的医疗服务进行审核,确保医疗行为符合规范和政策要求。例如,对门诊病历、住院病历等进行审核,…

硬件产品经理:硬件产品敏捷开发

目录 简介 敏捷 CSDN学院 作者简介 简介 之所以敏捷产品开发流程会越来越普遍。 主要得益于这个方法可以让企业使用更少的资源去开发出令客户满意的新产品。 敏捷开发强调的最重要的一点就是“快”。 也就是要求通过快速迭代来获取频繁的客户反馈。 这就特别适合应对市…

Python教你如何让代码摆脱死循环的困扰!

更多资料获取 📚 个人网站:ipengtao.com 在编写Python代码时,无限循环是一个常见的问题,可能导致程序陷入死循环,使得代码无法正常执行。这篇博客将介绍一些方法,帮助大家防止和处理无限循环,确…

ansible变量的使用

本章主要介绍playbook中的变量 自定义变量使用变量文件字典变量列表变量facts变量内置变量变量的过滤器 为了能够写出更实用的playbook,需要在playbook中使用变量。下面来讲解playbook 中常见的变量。本章实验都在/home/lduan/demo2下操作,先把 demo2目…

百度网盘资源下载慢解决方法

1、使用百度网盘客户端,设置使用空闲带宽下载 亲测,可以一定程度上解决下载慢的问题,但是对于有些文件下载还是很慢就不清楚为什么了。 2、使用IDM进行下载 (1)、第一步下载和安装IDM 搜索后,普通下载后安…

Python---静态Web服务器-返回固定页面数据

1. 开发自己的静态Web服务器 实现步骤: 编写一个TCP服务端程序获取浏览器发送的http请求报文数据读取固定页面数据,把页面数据组装成HTTP响应报文数据发送给浏览器。HTTP响应报文数据发送完成以后,关闭服务于客户端的套接字。 2. 静态Web服务器-返回固…

BWS2000倾角传感器c++测试代码【1】

使用瑞芬的倾角传感器配置的时候,数据手册一下就配置好了,但是BWS2000倾角传感器总是出错,这里进行一下记录出现的问题与解决方式。 1.初步测试 在配置BWS2000倾角传感器读取帧数据的时候,总是出现一个问题,就是进行…

Qt/QML编程学习之心得:在QML工程中添加库(十四)

实现库并且使用库,类似于vc中的静态库library、动态库dll、COM组件等方法一样,在Qt中也经常会使用库,或者将部分功能打包成库。 右击Qt项目,点击add library... 在linux中将.a文件导入,工程会自动在.pro温江中增加相应…

关于频谱仪是如何来实现辐射功率测量

1.1 内部基本原理框架 首先是接收到外部信号输入,然后经过可变衰减器衰减,接着进行变频,接着经过带宽带通滤波器进行滤波,滤波后的信号送入检波器进行信号检测,再经对数放大器放大后,送入低通滤波器进行视频…

Java文件流大家族(通俗易懂,学习推荐版,很详细)——操作文件本身和文件中的数据

1.File(操作文件本身) 1.定义 目录 2.常用方法 3.路径引用符 可以用/或者\\分隔路径 还可以用File.separator分隔路径,会根据不同系统使用啥分隔符。 4.绝对路径、相对路径及桌面路径表示 桌面路径为: 我电脑的用户名为X 5.示例…

解决找不到vcruntime140.dll无法继续执行的多种方法分享

最近,我在使用电脑时遇到了一个问题,即“由于找不到vcruntime140.dll无法继续执行”。vcruntime140.dll是Visual C Redistributable Packages中的一个组件,它是Visual Studio 2015中运行C程序所必需的。如果找不到vcruntime140.dll文件&#…

C++实现增序含头结点的单链例题:现已知单链表L中结点是按整数值递增排列,试写一算法将值为X的结点插入到表L中,使得L任然递增有序

因为比较简单直接给代码&#xff1a; <1>.c文件 #include"Module.h" int main() {int m 0;int flag 0,elect0;printf("*-----------------------------------------------------------------------------------------*\n");struct STU* List Cr…

Python接口自动化测试实战(视频教程+源码)

接口自动化测试是指通过编写程序来模拟用户的行为&#xff0c;对接口进行自动化测试。Python是一种流行的编程语言&#xff0c;它在接口自动化测试中得到了广泛应用。下面详细介绍Python接口自动化测试实战。 1、接口自动化测试框架 在Python接口自动化测试中&#xff0c;我们…

论文阅读——llava

Visual Instruction Tuning LLaVA 指令智能体分为两类&#xff1a;端到端的&#xff0c;通过LangChain[1]/LLM[35]协调各种模型的系统。 数据集生成用GPT辅助生成的&#xff0c;具体不写了。 模型结构&#xff1a; input image Xv LLM&#xff1a;Vicuna visual encoder&a…