MySQL数据库的操作
- MySQL数据库的操作
- github地址
- [0. 前言](#0. 前言)
- [1. 查看数据库](#1. 查看数据库)
- [2. 创建和删除数据库](#2. 创建和删除数据库)
- [3. 数据库的编码](#3. 数据库的编码)
- [4. 操纵数据库](#4. 操纵数据库)
- [5. 数据库的备份与恢复](#5. 数据库的备份与恢复)
- [6. 查看数据库的连接情况](#6. 查看数据库的连接情况)
- [7. 结语](#7. 结语)
MySQL数据库的操作
github地址
0. 前言
在学习 MySQL 的过程中,很多初学者往往只停留在"能用"的层面,却忽略了数据库底层的一些行为特征。
例如:创建数据库时究竟发生了什么?删除数据库为什么如此危险?字符集与校验规则对结果有什么影响?
本篇文章将从最基础的数据库操作讲起,带你系统地理解 MySQL 中数据库的查看、创建、删除、修改、编码设置、备份与恢复 等操作。
同时结合 Linux 实操演示,帮助你建立数据库操作与系统层面行为的映射关系,从"命令使用"上升到"原理理解",打好数据库管理的根基。
如果你想在今后的开发中更加自如地管理数据库、避免误操作带来的严重后果,那么这篇文章将非常适合你。
小提示:
- MySQL 建议我们关键字使用大写,但是不是必须的
1. 查看数据库
查看当前用户所能查看的数据库的列表:
- sql语法:
sql
show databases;

查看当前正在使用的是哪个数据库:
sql语法:
sql
use db_name; # 使用名为 db_name 的数据库 可以将其和 Linux 中的 cd 命令 做类比
select database(); # 查看当前正在使用的是哪个数据库 可以将其和 Linux 中的 pwd 命令 做类比

2. 创建和删除数据库
- 创建数据库 :在
Linux
系统中,创建数据库本质是在数据库的存储目录 下(当前ubuntu 22.04
下为/var/lib/mysql
) 创建一个目录 - 删除数据库 :在
Linux
系统中,删除数据库本质是数据库的存储目录 下(当前ubuntu 22.04
下为/var/lib/mysql
) 删除一个目录- 注意 :不能通过手动在数据库的存储目录 下(当前
ubuntu 22.04
下为/var/lib/mysql
) 创建或删除目录 的方式创建或删除数据库,应该通过sql命令创建和删除
- 注意 :不能通过手动在数据库的存储目录 下(当前
创建
sql语法:
sql
CREATE DATABASE [IF NOT EXISTS] db_name [create_specification [,create_specification] ...]
create_specification:
[DEFAULT] CHARACTER SET charset_name
[DEFAULT] COLLATE collation_name
说明:
- 大写的内容 表示关键字
[]
中的内容是可选项CHARACTER SET
:指定创建的数据库 采用的字符编码集COLLATE
:指定创建的数据库 字符集的校验规则
创建数据库实操:
sql
# 创建名为 d1 的数据库, 以下两种写法等同
create database d1;
create database if not exists d1;

删除
- sql语法:
sql
DROP DATABASE [IF EXISTS] db_ name;
执行删除之后的结果:
- 数据库内部看不到对应的数据库
- 数据库对应的文件夹被删除 。级联删除,里面的数据表也全部被删除
注意:不要随意删除数据库
删除数据库演示 ,实际开发项目时不要随意删除数据库
sql
drop database d1;

3. 数据库的编码
相同编码的必要性
数据一定有自己的编码格式,编码集必须是统一的。存取数据时,编码格式必须是相同的
创建数据库的时候,有两个编码集:
- 数据库编码集:数据库存数据时采用的编码格式
- 数据库校验集 :支持数据库进行字段比较 使用的编码,本质也是一种读取数据库中数据的采用的编码格式
数据库无论对数据做任何操作 ,都必须保证操作和编码必须是编码一致的
字符集和校验规则
查看系统默认字符集和校验规则
sql
语法:
sql
show variables like 'character_set_database'; # 查看系统默认字符集
show variables like 'collation_database'; # 查看系统默认校验规则


查看数据库多端的编码格式:
sql语法:
sql
show variables like 'collation_%';
connection
端:database
端server
端:

查看数据库支持的所有字符集和字符集校验规则
sql
show charset; # 查看数据库支持的字符集
show collation; # # 查看数据库支持的字符集校验规则
- 字符集 主要是控制用什么语言。比如
utf8
就可以使用中文
创建指定编码的数据库
- 创建名为 db1 的数据库,使用默认编码
sql
create database db1;
说明:当我们创建数据库没有指定字符集和校验规则时 ,系统使用默认字符集:
utf8
,默认校验规则是:utf8_general_ci
- 创建一个使用
utf8
字符集的 db2 数据库
sql
# 以下两种写法等效
create database db2 charset=utf8;
create database db3 character set utf8;
- 创建一个使用
utf8
编码集,并且校对规则为utf8_general_ci
的数据库 db3
sql
create database db4 charset=utf8 collate utf8_general_ci; # 既指明编码集,又指明校验集
- 创建一个使用
gbk
编码集,并且校对规则为gbk_chinese_ci
的数据库 d6
sql
create database d6 charset=gbk collate gbk_chinese_ci;
不同校验规则对数据库的影响
不区分大小写
创建不区分大小写的数据库 test1
sql
create database test1 collate utf8_general_ci; # test1 设置校验规则为 utf8_general_ci,结果 不区分大小写
use test1;
create table if not exists person(name varchar(20));
show tables;
desc person;
insert into person (name) values ('a');
insert into person (name) values ('b');
insert into person (name) values ('A');
insert into person (name) values ('B');
insert into person (name) values ('c');
insert into person (name) values ('D');
select * from person;
select * from person where name='a'; # test1 设置校验规则为 utf8_general_ci,结果 不区分大小写
区分大小写
- 创建区分大小写的数据库test2
sql
create database test2 collate utf8_bin; # test2 设置校验规则为 utf8_bin,结果 区分大小写
use test2;
create table if not exists person(name varchar(20));
show tables;
desc person;
insert into person (name) values ('a');
insert into person (name) values ('b');
insert into person (name) values ('A');
insert into person (name) values ('B');
insert into person (name) values ('c');
insert into person (name) values ('D');
select * from person;
select * from person where name='a'; # test2 设置校验规则为 utf8_bin,结果 区分大小写
结果差异
- 校验集是否区分大小 写会影响我们查看到的结果 和排序结果

4. 操纵数据库
修改数据库
sql语法:
sql
ALTER DATABASE db_name [alter_spacification [,alter_spacification]...]
alter_spacification:
[DEFAULT] CHARACTER SET charset_name
[DEFAULT] COLLATE collation_name
说明:
- 对数据库的修改主要指的是修改数据库的字符集,校验规则
使用示例:
将数据库 test1 的字符集改成 gbk
sql
alter database test1 charset=gbk collate gbk_chinese_ci;

查看创建数据库时使用的命令
sql语法:
sql
show create database 数据库名;
使用示例:
sql
show create database test1;

说明 :查看创建数据库时使用的命令,包含了命令中我们设置的字符集和校验规则
MySQL
建议我们关键字使用大写,但是不是必须的。- 数据库名字的反引号``,是为了防止使用的数据库名刚好是关键字
/*!40100 default.... */
这个不是注释。前面的CREATE DATABASE d1
所有版本的mysql
都会执行,/*!40100 default.... */
表示当前mysql
版本大于4.01版本,就执行/* */
中的sql语句
5. 数据库的备份与恢复
数据库本身是一个文件夹,我们可以像备份文件夹那样拷贝一份
/var/lib/mysql/
路径下的文件夹,但这么做会存在相当多的问题我们推荐使用
MySQL
本身提供的命令,对数据库进行备份
备份
- 对某个数据库进行备份,需要退出和该数据库的连接
语法:
sql
mysqldump -P3306 -u root -p 密码 -B 数据库名 > 数据库备份存储的文件路径;
- 带了
-B
选项时,备份出的文件中会多了一个create database
的命令 - 该备份数据库命令 无需在
mysql
命令行中执行,可以在Linux
中的任意路径执行
示例:
sql
# 可以在普通用户的home目录中 新建的 MySql 路径下执行
# 对名为 test1 的数据库进行备份
mysqldump -P3306 -u root -p -B test1 > /home/changan_memory/MySql_Back/mytest1.sql;

备份出的mytest.sql
文件里的内容,其实把我们整个创建数据库,建表,导入数据的执行的sql语句都装载这个文件中
如果备份的不是整个数据库,而是其中的一张表,怎么做?
sql
mysqldump -u root -p 数据库名 表名1 表名2 > D:/mytest.sql # D:/mytest.sql 为假设的数据库备份存放路径
同时备份多个数据库 ?
sql
mysqldump -u root -p -B 数据库名1 数据库名2 ... > 数据库备份存放路径
恢复
语法:
- 该命令需在
mysql
命令行中执行
sql
source /home/changan_memory/MySql_Back/mytest1.sql;
如果想对数据库改名,可以在备份时不带
-B
,恢复数据库时,先创建数据库,新的数据库名就是要改的新名字,再直接source
,即可重命名并恢复。
恢复数据库 ,其实就是将备份出的mytest1.sql
文件中记录的sql
语句再执行一遍
6. 查看数据库的连接情况
语法:
sql
show processlist;

-
该命令可以告诉我们当前有哪些用户连接到我们的
MySQL
,如果查出某个用户不是我们自己正常登陆的,很有可能数据库被人入侵了。 -
以后大家发现自己数据库比较慢时,可以用这个指令来查看数据库连接情况
7. 结语
通过本文的学习,我们从 MySQL 数据库的基本操作到安全备份与恢复 进行了系统梳理。
理解了数据库在系统中的物理表现形式、字符集对数据存储与比较的影响、以及删除表和数据库操作的潜在风险。
这些知识虽然看似基础,但却是每一位开发者必须掌握的底层技能。
只有真正理解数据库的行为,才能在复杂项目中写出更安全、更高效的代码。
🌱 技术的成长从理解细节开始,
⚙️ 稳扎稳打,才能让数据库为你所用。
以上就是本文的所有内容了,如果觉得文章对你有帮助,欢迎 点赞⭐收藏 支持!如有疑问或建议,请在评论区留言交流,我们一起进步
分享到此结束啦
一键三连,好运连连!
你的每一次互动,都是对作者最大的鼓励!
征程尚未结束,让我们在广阔的世界里继续前行!
🚀