MySQL库的操作『增删改查 ‖ 编码问题 ‖ 备份与恢复』

✨个人主页: 北 海
🎉所属专栏: MySQL 学习
🎃操作环境: CentOS 7.6 阿里云远程服务器
🎁软件版本: MySQL 5.7.44

成就一亿技术人


文章目录

  • 1.创建数据库
  • 2.数据库中的编码问题
    • 2.1.字符集与校验集
    • 2.3.支持的字符集与校验集
    • 2.4.自由设置字符集与校验集
    • 2.2.校验集对查询的影响
  • 3.查看数据库
  • 4.修改数据库
  • 5.删除数据库
  • 6.数据库的备份与恢复
  • 7.查看数据库的连接情况


1.创建数据库

创建数据库的语法为

CREATE DATABASE [IF NOT EXISTS] database_name;

[ ] 中的关键字可以选择不加,IF NOT EXISTS 的意思是如果不存在才创建 数据库

登录 MySQL 后输入指令进行创建

mysql> create database if not exists db1;

MySQL 中的语法不区分大小写,语法中通常 将关键字写成大写,方便学习和查看


注意: 如果数据库已存在,再次创建会报错,可以通过 if not exists 关键字将报错降低为警告

Linux 中创建数据库的本质就是 /var/lib/mysql 目录下创建了一个目录

进入 db1 目录,可以看到里面只有一个后缀为 .opt 的配置文件

通过 cat 指令查看其中的类型,可以发现默认只有 字符 character校对 collation 相关的配置信息,这俩其实就是 字符集检验集,用于设置 数据库 中的编码规则

为什么要设置编码?

因为 数据库 是用来存放 的,而 是用来存放内容的,内容又是以不同编码格式存储的,所以需要先确定 数据库 中的编码规则,才能确保后续能正常使用


2.数据库中的编码问题

2.1.字符集与校验集

MySQL 中与编码相关的主要是 字符集校验集

字符集 用于规定未来存储时的编码格式

校验集 则是规定数据查询时的校验规则

查看 MySQL 所有关于默认 字符集校验集 的使用情况

mysql> show variables like 'character_%';

mysql> show variables like 'collation_%';

注:%MySQL 表示匹配一个或任意多个字符,类似于 Linux 中的 *

其中 字符集 的使用涵盖了 客户端、连接、数据库、文件系统、结果、服务端、系统、目录校验集 则主要用于 连接、数据库、服务端

主要都是使用 utf8 作为 字符集utf8_general_ci 作为 校验集

校验集 utf8_general_ci 是适用于 utf8 的一种校验规则,除此之外还有其他校验规则(后面说)


接下来查看 数据库 默认使用的 字符集编码集

mysql> show variables like 'character_set_database';

mysql> show variables like 'collation_database';

当前 MySQL 对于数据库的默认 字符集utf8,这是因为之前安装 MySQL 时在配置文件 my.cnf 设置的默认字符集就是 utf8;默认的 校验集 则是 utf8_general_ci

以上是创建 数据库 时默认使用的 字符集校验集,如果想要查看具体某个 数据库 的编码使用情况,可以 cd/var/lib/mysql 目录中,在进入具体的数据库目录,查看后缀为 .opt 的配置文件信息即可

2.3.支持的字符集与校验集

MySQL 支持很多 字符集,通过指令查看

mysql> show charset;


几乎所有主流 编码 它都支持,接下来看看支持的 校验集

mysql> show collation;

截图过长,只截取了部分

一种 字符集 可以有多种 校验集,所以这张表会很大,不同的 校验集 的校验规则有所不同,比如 utf8_general_ciutf8_bin 的区别在于 是否忽略大小写

utf8_general_ci 是忽略大小写的,而 MySQL 服务端使用的 校验集 正是 utf8_general_ci,这也就是解释了为什么在 MySQL 中输入指令可以忽略大小写;至于 utf8_bin 区分大小写,这两种 校验集 的演示放在后面细谈

2.4.自由设置字符集与校验集

配置文件 my.cnf 中设置的 字符集 配置信息就像一个 “缺省值”,如果用户不指定,就使用默认的,如果用户指定了,就优先使用用户指定的 字符集校验集 也是如此

注意: 校验集要能适用于字符集,否则会导致无法创建

创建 数据库 时指定编码相关信息的语法如下

CREATE DATABASE [IF NOT EXISTS] database_name [CHARSET=xxx | CHARACTER SET xxx] [COLLATE xxx]

| 表示存在多种写法,可以任意选择其中一种

接下来演示创建 数据库 时指定 字符集校验集

这里指定字符集为 gbk,校验集为 gdk_chinese_ci

mysql> create database if not exists db2 charset=gbk collate gbk_chinese_ci;

// 或者

mysql> create database if not exists db2 character set gbk collate gbk_chinese_ci;



如果只指定 字符集 或者 校验集 可以成功创建吗?

可以的,会根据 字符集 或者 校验集 推导出它的另一半

那如果指定毫不相关的 字符集校验集 能成功创建 数据库 吗?

不行,会直接报错的,既然校验规则不适用,创建了也没意义,这就好比你往语文卷子上写英语,语文老师大概率是看不懂的,并且不会批改你的卷子

总之,MySQL 支持在创建 数据库 时自由设置 字符集校验集,只指定其中一方也能成功创建,因为 MySQL 可以进行推导,但如果指定的 字符集校验集 没有关系,是无法创建 数据库 的,根据实际情况灵活设置

2.2.校验集对查询的影响

一个 字符集 拥有多个 校验集,也就意味着可以使用不同的校验规则,接下来演示 utf8_general_ciutf8_bin 这两种不同的 校验集 对查询的影响

首先创建一个 校验集utf8_general_ci数据库,随后创建一张 ,并向 中插入多条数据,然后条件查询其中的结果

mysql> create database if not exists test1 collate utf8_general_ci;

mysql> use test1;

mysql> create table t (name varchar(32));

mysql> insert into t values ('a');
mysql> insert into t values ('A');
mysql> insert into t values ('b');
mysql> insert into t values ('B');
mysql> insert into t values ('c');
mysql> insert into t values ('C');

mysql> select * from t1 where name='a'; 

注意: 在对数据库进行操作前,需要先 use database_name 指明数据库

执行结果如下


注:where 是条件查询语句,可以用来指定查看规则,这里的 where name='a' 是查询 t 表中 namea 的行信息

可以看到最终查询结果为 aA,明明只要求 name='a',但最终查出来 A,这是因为 utf8_general_ci 校验集 在进行校验时,是 不区分大小写

接下来看看 utf8_bin 校验集 对查询的影响

同样的创建数据库、创建表、插入数据、查询结果

mysql> create database if not exists test2 collate utf8_bin;

mysql> use test2;

mysql> create table t (name varchar(32));

mysql> insert into t values ('a');
mysql> insert into t values ('A');
mysql> insert into t values ('b');
mysql> insert into t values ('B');
mysql> insert into t values ('c');
mysql> insert into t values ('C');

mysql> select * from t1 where name='a'; 

可以看到,当 校验集utf8_bin 时,查询结果是 区分大小写 的,最终查出了 a 这行数据

这里想说的是 不同校验集对查询结果是有差异的,需要结合具体业务场景选择校验集,编码集也是如此,不过一般情况下都不需要指定,使用默认的 utf8utf8_general_ci 就行了


3.查看数据库

可以查看当前 MySQL 中已经创建了哪些 数据库

mysql> show databases;

当然也可以直接去 /var/lib/mysql 目录中查看

cd /var/lib/mysql

ll

存在这么多 数据库,如何知道自己当前处于哪个数据库中?

通过 database() 函数查看,这是一个函数,可以用于查看当前所处 数据库(个人猜测是调用了显示当前所处路径的相关接口实现)

mysql> select databases();

可以看到当前处于 test2 数据库中

如何查看 数据库 创建时的详细信息?

可以通过 show 进行查看,这里看看 test2 的创建信息

mysql> show create database test2;

// 或者

mysql> show create database test2 \G

在后面加上 \G 是为了格式化显示,让显示结果更加清晰

可以看到创建 test2 时的详细信息,比如指定的 字符集编码集

/*!40100 DEFAULT CHARACTER SET utf8 COLLATE utf8_bin */ 是什么意思?
这是句话是为了确保兼容性,因为在 MySQL 4.1 之前,是无法在创建数据库时指定字符集和校验集的。所以这句话的意思是 如果 MySQL 版本高于 4.1 就加上这句话(创建字符集和校验集),否则就不加


4.修改数据库

数据库 可以修改很多东西(不只是编码格式),修改相关的语法如下

修改数据库名(MySQL 5.1.23 之前的版本适用)

RENAME DATABASE old_name TO new_name;

出于安全考虑,这个语法在当前的 MySQL 中已经不被支持了,因为 数据库 更名后,上层应用在使用 数据库 时会受到影响,比较稳妥的更名方法是 备份数据、新建数据库(更名)、导入数据(还是不推荐改名)

数据库轻易不要删除,数据库轻易不要改名

修改编码格式

ALTER DATABASE database_name [alter_spacification [,alter_spacification]...];

之前的 test2 数据使用的是 utf8utf8_bin,现在将其修改为 gbkgbk_chinese_ci

mysql> alter database test2 charset=gbk collate gbk_chinese_ci;

除此之外,还可以修改 数据库所有者、启用/禁用数据库的自动提交等,这些东西需要结合后面的相关知识理解,这里就不再阐述


5.删除数据库

Linux 中,数据库 的本质就是一个 目录,因此 数据库 也是可以删除的,具体语法如下

DROP DATABASE [IF EXISTS] database_ name;

在这里 IF EXISTS 表示检查 数据库,存在才删除,删除不存在的 数据库 是会报错的,加了 IF EXISTS 后可以避免报错,转为警告

删除之前创建的数据库

执行删除之后的结果:

  • 数据库内部看不到对应的数据库
  • 对应的数据库文件夹被删除,级联删除(里面的数据表全部被删)

注意: 不要轻易删除数据库,数据库删除后很难恢复


为了避免误删 数据库,通常需要将 数据库 进行备份


6.数据库的备份与恢复

有一种简单粗暴的备份方式:直接将对应的目录打包,需要使用时解压至指定目录即可

这种方式 严重不推荐,原因是恢复时可能会出现问题,假设恢复至版本更低的 MySQL 中,会出现各种奇怪的问题,毕竟老版本没有新特性,还有就是这种做法太暴力了

推荐使用 MySQL 提供的备份工具 mysqldump 进行备份,具体语法为

mysqldump -u 用户 -p -P 端口 -B 待备份的数据库 > 目标路径(含目标文件)

比如把之前创建的 test2 数据库进行备份

注意: 如果有人在使用该数据库,需要先断开连接

mysqldump -u root -p -P 8080  -B test2 > /home/Yohifo/MySQL/test2.sql

回车并输入密码后,对应的数据库就备份成功了

看看备份文件是什么内容

cat test2.sql

其实就是一些 数据库 的配置信息 + 执行过的 SQL 语句


有备份就有恢复,恢复的语法如下

mysql> SOURCE 路径; 

接下来先删除 MySQL 中的 test2 数据库

mysql> show databases;

mysql> drop database if exists test2;

mysql> show databases;

然后从 Linux 中读取备份文件,并进行恢复

mysql> source /home/Yohifo/MySQL/test2.sql

一瞬间执行了很多条语句,并且都是成功状态,接下来查看是否存在 test2 数据库


数据库 test2 已经成功恢复,包括其中的 表中的数据 都已经恢复了

所以备份与恢复 数据库 还是比较简单的,只需要从 MySQL 中获取备份后的 sql 文件,可将该备份文件进行传输,其他 MySQL 客户端只需要 source 即可轻松恢复整个 数据库


可以只备份 数据库 中的 ,语法如下

mysqldump -u root -p -P 端口 -B 数据库名 表名1 > 目标路径(含文件)

也可以同时备份多个 数据库

mysqldump -u 用户 -p -P 端口 -B 数据库1 数据库2 数据库3 > 目标路径(含目标文件)

语法中的 -B 含义是什么?
-B 表示备份时,将创建数据库的语句也进行了备份,恢复时可以一键恢复;但如果不加 -B 选项,恢复时就需要先创建数据库,再 use 数据库,然后才能 source


7.查看数据库的连接情况

MySQL 支持多用户访问,可以通过指令查看当前的使用情况

mysql> show processlist;

支持 本地连接远程连接(需要进行设置)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Antv/G2 折线图 DataSet 数据展开成指定格式

DataSet 文档 G2 3.2 DataSet 文档 Demo&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><m…

Kakaotalk如何注册?常见问题解答

kakaoTalk是一款韩国即时通讯软件&#xff0c;使用程度类似于国内的微信&#xff0c;他还包含叫车服务、食品外送、餐厅预订、支付和游戏等多种功能&#xff0c;几乎每个韩国人都在使用KakaoTalk。 因此&#xff0c;对于要发展韩国市场的独立站人&#xff0c;这款软件必定是营…

加速可编程创新,2023年英特尔FPGA中国技术日披露全矩阵FPGA产品与应用方案

在新场景、新应用海量增长的驱动下&#xff0c;中国本地市场对于FPGA产品的需求也在日益多元化和快速扩展。我们始终致力于以中国客户的实际需求为导向&#xff0c;基于领先的FPGA产品和软件为千行百业提供全场景的解决方案。——叶唯琛 英特尔可编程方案事业部中国总经理 今日…

物理问题中常见的分析问题----什么样的函数性质较好

物理问题中常见的积分符号位置交换问题 重极限与累次极限 高数下的定义 累次极限&#xff1a;求极限时需要遵循一定的顺序重极限&#xff1a;任意方向趋于的极限 两者之间的关系&#xff1a; 两者没啥关系存在累次极限存在而不相等的函数...... 求和符号与积分符号互换--逐项积…

【Axure】axure rp 导入元件库和使用,主流元件库下载使用

vant 元件库下载&#xff1a;Vant4 设计资源 element UI 元件库下载&#xff1a;element ui 设计资源 Andt Design Vue 下载设计资源&#xff1a;Andt Design Vue Andt Design Pro下载设计资源&#xff1a;Andt Design Pro Arco Design 设计资源&#xff1a;Arco Design …

光纤网络排障分析

日常工作中&#xff0c;发现某条光链路连接不稳定&#xff0c;时快时慢、时断时连。 在交换机上直接查看这条链路交换口上的光收发功率&#xff0c;发现异常。 简单说明下&#xff0c;RX Power代表光模块接收功率&#xff0c;TX Power代表发送功率。 引起这种故障的原因很多&a…

插入排序详讲:直接插入排序+希尔排序(图解+思路+代码)

文章目录 排序一、 排序的概念1.排序&#xff1a;2.稳定性&#xff1a;3.内部排序&#xff1a;4.外部排序&#xff1a; 二、插入排序1.直接插入排序2.希尔排序 排序 一、 排序的概念 1.排序&#xff1a; 一组数据按递增/递减排序 2.稳定性&#xff1a; 待排序的序列中&#…

【第2章 Docker容器基础入门】 课程介绍 + docker容器介绍

一、课程介绍 1.1、容器运行时 1.2、官网 1.3、私有镜像 二、什么是 Docker &#xff1f; 2.1 Docker 的思想来自于集装箱&#xff0c;集装箱解决了什么问题&#xff1f; 2.2 、K8S 1.25版本之后可能废弃docker&#xff0c;为什么还需要学习docker&#xff1f; 一、课程介…

Golang 发送邮件

Go 有内置好的本地库可以发送邮件&#xff0c;在 GitHub 上也有别人写好的第三方包可以发送邮件。 本文将分别介绍一下这两种发送邮件的方式。 1、内置的net/smtp 为了更好的模拟发送邮件&#xff0c;推荐一个邮件测试工具&#xff1a;MailHog&#xff0c;MailHog 是面向开发…

永磁材料测试系统参考标准

1. 概述 TY1000是一套专用于测量永磁材料磁性能的智能化系统&#xff0c;由励磁与测量主机、电磁铁、磁测量传感器、计算机及测量软件等组成。适用于测量各类型永磁材料的磁性能&#xff0c;并绘制相关磁特性曲线&#xff0c;具有操作便捷、测量快速、重复性好、可靠性高等特点…

【JUC】四、可重入锁、公平锁、非公平锁、死锁现象

文章目录 1、synchronized2、公平锁和非公平锁3、可重入锁4、死锁 1、synchronized 写个demo&#xff0c;具体演示下对象锁与类锁&#xff0c;以及synchronized同步下的几种情况练习分析。demo里有资源类手机Phone&#xff0c;其有三个方法&#xff0c;发短信和发邮件这两个方…

RXMVB2 2RK251 206AN大容量双位置继电器 JOSEF约瑟 DC110V

系列型号&#xff1a; RXMVB2 RK 251 204大容量双位置继电器; RXMVB2 RK 251 205大容量双位置继电器; RXMVB2 RK 251 206大容量双位置继电器; DCS-11大容量双位置继电器; DCS-12大容量双位置继电器; DCS-13大容量双位置继电器; 一、用途 RXMVB2(DCS-10)系列大容量双位置继电器…

【开源】基于Vue和SpringBoot的校园失物招领管理系统

项目编号&#xff1a; S 006 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S006&#xff0c;文末获取源码。} 项目编号&#xff1a;S006&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、研究内容2.1 招领管理模块2.2 寻物管理模块2.3 系…

HackTheBox-Starting Point--Tier 2---Vaccine

文章目录 一 Vaccine 测试过程1.1 打点1.1.1 FTP匿名登录1.1.2 SQL注入 1.2 权限提升 二 题目 一 Vaccine 测试过程 1.1 打点 1.端口扫描 nmap -sV -sC 10.129.191.631.1.1 FTP匿名登录 2.FTP允许匿名登录&#xff0c;发现backup.zip ftp 10.129.191.63解压backup.zip&#x…

Docker-minio部署

1.创建目录 创建文件目录&#xff0c;用来存放配置和上传文件目录 &#xff08;1&#xff09;Minio 外部挂载的配置文件(/mydata/minio/config) &#xff08;2&#xff09;存储上传文件的目录(/mydata/minio/data) mkdir -p /home/minio/config mkdir -p /home/minio/data2.拉…

黑群晖断电导致存储空间已损毁修复记录

黑群晖断电2次,担心的事情还是发生了,登录后提示存储空间已损毁...... 开干!! 修复方式: 1.使用SSH登录到群晖,查看相关信息 # 登录后先获取最高权限 root@DiskStation:~# sudo -i # 检测存储池状态 root@DiskStation:~# cat /proc/mdstat Personalities : [linear] […

【JavaEE】Servlet API 详解(HttpServletRequest类)

二、HttpServletRequest Tomcat 通过 Socket API 读取 HTTP 请求(字符串), 并且按照 HTTP 协议的格式把字符串解析成 HttpServletRequest 对象&#xff08;内容和HTTP请求报文一样&#xff09; 1.1 HttpServletRequest核心方法 1.2 方法演示 WebServlet("/showRequest&…

M2LC-Net

模型结构 作者未提供代码

Eclipse使用配置tomcat服务:未识别的web项目

问题1&#xff1a;未识别的项目 解决&#xff1a;elispse未识别到改项目为Web项目

DDD设计模式需要在存储层之前就需要有ID,如何实现?

在DDD设计领域中, 聚合根 或者实体在存储层之前就需要有id。一般采用如下类提前生成,然后直接落库。 DDD元素 在使用DDD设计系统时,主要包括Entity,Value Object,Service,Aggregate,Repository,Factory,Domain Event,Moudle等元素 在建模时,Entity可以用来代表一个事物…