【MySQL】库的操作

【MySQL】库的操作

SQL 是语言;MySQL 是实现了 SQL 的数据库软件

本篇文章会穿插sql命令相关知识讲解

上一篇我们认识了 MySQL,了解了数据库、数据表以及客户端和服务器端的基本概念。本篇继续往下走:在真正创建数据表之前,我们先要有一个数据库。

可以把数据库理解成一个用于组织和管理相关数据的逻辑空间。比如,学校系统可能需要保存学生、课程和成绩等信息,我们可以先创建一个 school 数据库,再在其中创建不同的数据表

本篇文章会围绕一个练习数据库展开,依次学习创建、查看、选择、修改和删除数据库,并进一步认识字符集、校验规则以及数据库备份与恢复。为了避免误操作,本文使用专门的练习库 test_school,不操作已有的重要数据库。

文章目录

一、 创建数据库

1、 进入mysql

打开 CentOS 终端后,最开始看到的是 Linux shell 提示符 。像mysql -u root -p、ls、cd、cat 这样的命令属于 Linux 命令,要在这里输入

mysql登录指令

bash 复制代码
mysql -u root -p

-u 指定用户名,root 是用户名 ;-p 表示随后提示输入密码 。输入密码时屏幕通常不显示字符,这是正常的

输入登录命令并成功进入 MySQL 后,通常会看到 mysql> 。这表示你已经进入 MySQL 客户端,可以输入SQL语句了

查看mysql版本

bash 复制代码
SELECT VERSION();

SELECT 是查询关键字;VERSION() 是 MySQL 提供的函数,用来返回服务器版本;圆括号表示调用函数;分号结束语句

SQL 关键字通常不区分大小写,所以 SELECT VERSION();和selectversion();通常都能执行。

一条 SQL 可以写在一行,也可以为了好读拆成多行 ;只要语法正确,并且最后用分号结束即可。;分号表示这个指令已经写完了。

2、 创建数据库

数据库是组织数据的逻辑空间 。创建数据库,就相当于先准备一个专门存放某一类业务数据的"容器" 。本篇统一使用 test_school 作为练习数据库名称。

创建数据库的基本语法

bash 复制代码
CREATE DATABASE 数据库名;

CREATE 是创建关键字;DATABASE 代表数据库;后面填写你想要设置的数据库名称

这表示数据库创建成功。这里的"1 row affected"是 MySQL 对执行结果的提示,不代表数据库里已经有一条学生记录。此时我们只是创建了数据库,还没有创建表或插入数据。

为了避免重复创建,可以加入(推荐):IF NOT EXISTS

IF NOT EXISTS 意思是"如果不存在" 。它告诉 MySQL:只有当这个名字的数据库不存在时才创建;如果已经存在,就跳过创建,避免因为重复而报错。

1 warning警告,代表 test_school 数据库已经存在,所以没有新建,只是给一个提醒

3、 字符集与校验规则

创建数据库时,除了名字,还可以设置字符集和校验规则。

什么是字符集?

计算机底层保存的是二进制数据,而我们希望存储和读取的是中文、英文、数字以及各种符号。字符集规定字符如何编码 。数据库、客户端和应用程序的编码设置需要配合,否则可能出现乱码。

我们常用字符集是utf8mb4 ,在 MySQL 中,utf8mb4 能够完整支持 Unicode 字符,包括常见中文、英文以及许多扩展字符和 emoji。

打个比方:客户端用 utf8mb4 把汉字"种"转成 E4 B8 AD,数据库也是 utf8mb4,存入后读出这串字节,还原成汉字"中",就不乱码了。

什么是校验规则(Collation)?

校验规则(排序规则)主要决定字符串比较和排序时采用什么规则。例如,比较两个字符串时是否区分大小写、是否区分重音,以及排序时如何判断先后顺序。它不是另一套字符编码,而是建立在字符集之上的比较规则。

名称末尾常见的 _ci 表示不区分大小写 (case-insensitive);_cs 表示区分大小写 (case-sensitive);_bin 表示按二进制值比较。不同版本支持的规则名称可能不同。

4、字符集和校验规则展示

查看 MySQL 支持的字符集

bash 复制代码
SHOW CHARACTER SET;

SHOW 是查看关键字;CHARACTER SET 代表字符集

查看 utf8mb4 对应的校验规则

bash 复制代码
SHOW COLLATION LIKE 'utf8mb4%';

SHOW COLLATION:查看校验规则;LIKE 'utf8mb4%':只筛选以 utf8mb4 开头的校验规则

后缀含义:

  • ci = case insensitive:大小写不敏感,A 和 a 视为相等
  • bin = binary:二进制比较,严格区分大小写,按字节直接对比

简单来说,排序规则决定字符怎么比较、怎么排序,而字符集只决定字符怎么转二进制存储。

5、创建时指定字符集和校验规则

  • CREATE DATABASE test_school_charset:创建名为 test_school_charset 的数据库
  • DEFAULT CHARACTER SET utf8mb4:指定这个库默认字符集是 utf8mb4,负责文字转二进制存储
  • DEFAULT COLLATE utf8mb4_general_ci:指定这个库默认排序规则,大小写不敏感,用于比较、排序

数据库的默认字符集和校验规则会作为之后创建表时的默认设置;如果创建表或字段时另外指定了字符集或校验规则,则可以覆盖继承的默认值。

二、 查看和选择数据库

创建数据库之后,我们需要知道它是否存在 ,并告诉 MySQL 接下来要在哪个数据库中执行操作

查看当前 MySQL 中的数据库

bash 复制代码
SHOW DATABASES;

SHOW DATABASES(注意要加s) 用于查看当前账号有权限看到的数据库。information_schema、mysql、performance_schema、sys:系统自带库,存 MySQL 本身的元数据、权限、性能信息,不能删除。

选择数据库:USE

bash 复制代码
USE test_school;

USE 的作用是切换当前会话正在使用的数据库。之后如果创建表时没有写明数据库名,MySQL 就会默认在当前选中的数据库中操作。

查看当前正在使用的数据库

bash 复制代码
SELECT DATABASE();

如果还没有选择数据库,SELECT DATABASE() 通常会返回 NULL。这个函数可以帮助我们确认当前操作对象,避免误把表建到其他数据库中。

三、 数据库的修改与删除

修改数据库的默认字符集和校验规则

数据库创建之后,也可以修改它的默认字符集和校验规则。例如:

bash 复制代码
ALTER DATABASE test_school
DEFAULT CHARACTER SET utf8mb4
DEFAULT COLLATE utf8mb4_general_ci;

ALTER DATABASE:修改已有数据库的配置

这条命令只改库的默认规则,库里已经存在的表,编码不会自动跟着变;只有之后新建的表才会继承这套字符集

删除数据库:DROP DATABASE

当某个练习数据库不再需要时,可以使用 DROP DATABASE 删除。删除数据库是具有破坏性的操作,会删除该数据库及其包含的表等对象和数据,因此执行前一定要确认数据库名称。

bash 复制代码
DROP DATABASE test_school_charset;

Query OK, 0 rows affected 代表数据库已经删掉了

删除后可以执行 SHOW DATABASES;,确认它已经不在列表中。

更安全地处理不存在的数据库

bash 复制代码
DROP DATABASE IF EXISTS test_school_charset;

IF EXISTS 表示只有数据库存在时才执行删除;如果数据库不存在,则不会因为找不到数据库而报错。它适合用于清理练习环境,但仍然不能代替删除前的核对。

重要提醒:不要对 mysql、information_schema、performance_schema、sys 等系统数据库执行删除操作,也不要把 DROP DATABASE 随意用于存有真实数据的数据库。

四、 数据库的备份与恢复

1、数据库备份

数据库中保存的可能是重要业务数据。如果误操作、程序故障或系统故障导致数据丢失,备份可以帮助我们恢复。因此,除了会创建和管理数据库,还应该了解最基本的备份与恢复方法。

啥是数据库备份呢?

原来的数据库 :test_school里面可能有学生表、成绩表、课程表等

数据库的备份文件 :test_school_backup.sql,是一个保存了数据库结构和数据的 SQL 文件

如果原数据库出了问题,就可以利用备份文件重新建立数据库

注意 :.sql 文件不是数据库本身 ,而是记录了如何创建数据库、表以及恢复数据等内容的 SQL 语句。

退出 MySQL 客户端

bash 复制代码
EXIT;

mysqldump 是 Linux 命令行中的备份工具,不是在 mysql> 提示符下执行的 SQL 命令。因此,先从 MySQL 客户端退出;回到 Linux shell 提示符后,再执行下面的备份命令。

使用 mysqldump 备份数据库

bash 复制代码
mysqldump -u root -p test_school > test_school_backup.sql

mysqldump 是数据库备份工具;-u root 指定登录用户;-p 表示按提示输入密码;test_school 是要备份的数据库名称;> 表示把导出的 SQL 内容写入右侧备份文件 test_school_backup.sql。

可以用 ls -l test_school_backup.sql 检查备份文件是否生成。

备份文件中通常包含创建表和插入数据等 SQL 语句。它是文本形式的逻辑备份,不是直接复制 MySQL 正在使用的内部数据文件。

2、恢复数据库

现在我们假设原来的数据库出了问题,需要通过备份文件恢复。先创建一个新的空数据库,再把备份文件里的内容导入进去

回到 MySQL 客户端:

bash 复制代码
mysql -u root -p

进入 mysql> 后执行:

bash 复制代码
CREATE DATABASE test_school_restore
DEFAULT CHARACTER SET utf8mb4
DEFAULT COLLATE utf8mb4_general_ci;
EXIT;

然后回到 Linux shell,执行导入:

bash 复制代码
mysql -u root -p test_school_restore < test_school_backup.sql

test_school_restore要恢复到哪个数据库;<从文件中读取内容;test_school_backup.sql备份文件。

这里要特别注意: >:把内容写进文件,常用于备份。 <:从文件读取内容,常用于恢复。

再进入mysql,检查恢复结果

USE test_school_restore; 选择 test_school_restore 作为当前操作的数据库。

SHOW TABLES; 查看当前数据库里面有哪些表。当然我们本来的test_school里啥都没有,所以备份也是empty

备份文件不一定包含所有东西

bash 复制代码
MySQL
  └── test_school
        ├── student 表
        ├── course 表
        └── score 表

现在执行:

bash 复制代码
mysqldump -u root -p test_school > test_school_backup.sql

把 test_school 数据库的内容导出到一个 SQL 文件里 。

这个 SQL 文件里面,可能保存了:

  • 创建 student 表的语句。
  • 创建 course 表的语句。
  • 创建 score 表的语句。
  • 向这些表插入数据的语句。

但是,它不一定包含创建 test_school 数据库的语句 。

也就是说,备份文件可能保存了数据库里面的东西,却没有保存数据库这个容器本身的创建命令 。

所以恢复之前要先创建目标数据库,把备份文件中的内容导入到test_school_restore 这个新数据库里。

五、 本篇常用命令速查

操作 命令
创建数据库 CREATE DATABASE test_school;
避免重复创建 CREATE DATABASE IF NOT EXISTS test_school;
查看数据库列表 SHOW DATABASES;
查看创建语句 SHOW CREATE DATABASE test_school;
选择数据库 USE test_school;
查看当前数据库 SELECT DATABASE();
查看字符集 SHOW CHARACTER SET;
查看校验规则 SHOW COLLATION LIKE 'utf8mb4%';
修改默认字符集 ALTER DATABASE test_school DEFAULT CHARACTER SET utf8mb4;
修改默认校验规则 ALTER DATABASE test_school DEFAULT COLLATE utf8mb4_general_ci;
删除数据库 DROP DATABASE test_school;
安全检查式删除 DROP DATABASE IF EXISTS test_school;
备份数据库(Linux shell) mysqldump -u root -p test_school > test_school_backup.sql
恢复数据库(Linux shell) mysql -u root -p test_school_restore < test_school_backup.sql
相关推荐
2603_969694852 小时前
【MySQL学习笔记】DQL(基础查询/条件/聚合/分组/排序/分页)与 DCL(用户权限)全解析
数据库·笔记·学习·mysql·学习方法
Paper数据分析-经管学术2 小时前
1985-2025年地级市绿色发明专利被引量
数据库
念何架构之路2 小时前
Go 标准库 database/sql 详解
数据库·sql·golang
云边有个稻草人2 小时前
MongoDB迁移不止是数据搬家:用KingbaseES重构文档数据开发
数据库·mongodb·重构·国产数据库·信创数据库·数据库国产化·mongodb迁移
MaAidan2 小时前
让 Agent 接上 YApi、Yuque、数据库、Redis 和日志:我的 MCP 资源绑定设计
数据库·redis·缓存
pikapika~~~2 小时前
Mysql+Redis八股
数据库·redis·mysql
ShineWinsu2 小时前
对于Qt:QLCDNumber常见属性以及QTimer的解析
服务器·数据库·c++·qt·gui·qtimer·qlcdnumber
captain37611 小时前
MyBatis(入门5)其他查询操作
java·数据库·spring boot·mybatis
小此方11 小时前
Re:Mysql数据库基础篇(八):详细讲解复合查询、多表查询、自连接、多行、多列子查询与合并查询
数据库·mysql