MySQL学习(1)——基础库操作

欢迎来到博主的专栏:MySQL学习

博主ID:代码小豪

文章目录

数据库原理

mysql版本:mysql8.0

操作系统:ubuntu22.4

为了减少由于环境配置以及权限限制带来的使用问题,博主建议大家使用root账号操作。

shell 复制代码
mysql -uroot -p

如果在安装MySQL时,注册了用户密码,那就使用注册的密码登录,如果没有注册密码,那就直接按下回车免密登录。

所谓安装数据库服务器,只是在机器上安装了一个数据库管理系统程序,这个管理程序可以管理多个数据库,一般开发人员会针对每一个应用创建一个数据库。为保存应用中实体的数据,一般会在数据库中创建多个表,以保存程序中实体的数据。数据库服务器、数据库和表的关系如下:

我们程序有时候是需要保存数据的,比如游戏,需要保存用户的账号数据,而这些数据是不能只保存在内存当中的,因为程序一关闭,数据就丢失了。那么为了长期保存这些数据,通常我们会将这些数据保存在磁盘当中,即文件的形式保存。

那么为什么我们不选择用文件,而是用数据库呢?这是因为文件的数据,如何查找、如何读取、如何修改。这些操作都需要用户自己去编写代码。这会导致开发周期延长。换句话说也是怕麻烦(hh)。

实际上MySQL也是将数据保存在文件当中,这一点我们会在后面体现。但是数据库的本质并不是文件‌。数据库是一个存储和管理数据的系统,它通过特定的格式将数据存储在文件中,但数据库的功能远不止于此。数据库不仅提供数据的存储功能,还具备数据管理、查询优化、数据安全等多种高级功能。这些功能使得数据库与简单的文件存储有本质的区别‌

基础库操作

增删数据库

查看数据库

shell 复制代码
show databases;

查看当前存在的数据库

但是实际上除了使用指令查看外,我们还可以进入到目录/var/lib/mysql/中查看,此时该路径下的目录文件,就是一个数据库

创建数据库

shell 复制代码
create databases [if not exists] db_name;

db_name是创建的数据库的名字,[]中的是可选选项,表示创建db_name之前判断一下是否存在同名数据库

比如,我们创建一个名为test的数据库,可以输入create database test;或者create database if not exists test;

但是实际上我们创建的数据库是需要携带编码集和校验规则的的,首先编码集不仅规定了数据如何存储,也规定了数据如何读取,这就好比如果你用中文写了一篇文章,那么读这篇文章的人就要会中文才行。如果不会中文怎么读取呢?而校验集则是规定了字符的排序规则和比较规则,比如你写一个字符串比较的算法,是不是首先要规定字符串比较的方式啊?比如字典序之类的。因此校验规则影响字符串的比较、排序结果以及索引行为。

创建一个使用utf8字符集的数据库

shell 复制代码
create database db_name charset=utf8;

创建一个使用utf8字符集,并带校对规则的数据库。

shell 复制代码
create database db_name charset=utf8 collate utf8_general_ci;

如果没有指定编码集合校对规则,那么该数据库使用的就是默认的编码集和校对规则。通过修改配置文件可以修改默认等的编码集合校对规则。

删除数据库

shell 复制代码
DROP DATABASE [IF EXISTS] db_ name;

比如我们将刚刚创建的test数据库删除。使用drop database test或者drop database if exists test

数据库编码与校验规则

查看所有编码和校验规则

MySQL 复制代码
show charset;

使用show cahrset;可以查看MySQL支持的所有编码集和对应的校验规则

查看单一数据库使用的编码集和校验规则

使用SQL语句SHOW CREATE DATABASE your_database_name;

比如我们创建一个test1数据库,在我的机器上,默认使用的编码集是utf-8,使用的校验规则也是utf-8对应的校验规则。因此test1的编码集应为utf-8,校验规则为utf-8对应的校验规则

虽然上图没有显示校验规则,这是因为如果我们使用utf8默认的校验规则,MySQL不显示校验规则,不过test1使用的依旧是utf-8的对应默认校验规则。

如果创建的校验规则不是编码集的默认规则,那么就会显示出来,比如我们创建test3,使用utf8和utf8_bin校验规则(默认的校验规则是utf8mb3_general_cl)。

这里再补充一个由于版本差异导致情况,在MySQL8.0以上版本,使用utf8作为编码集,实际上使用的utf8mb3。

验证不同的校验规则对于库中数据的影响

在前面的文章中,博主创建了相同编码集,不同校验规则规则的两个库,分别是test1(utf8,utf8_gergenalci)和test3(utf8,utf8_bin)。现在忽略建表,插入数据,搜索数据等操作(后面会讲),我们向test1和test3插入('A''a''B''b''C'c')。观察不同校验规则下,对于排序,搜索有什么影响。

test1中对于字符'a'的搜索结果

test3中对于字符'a'的搜索结果

可以发现,在test1中搜索'a'的结果有两个,而在test3中只有一个,这是因为utf8_gergenalci校验规则不区分大小写。而utf8_bin校验规则区分大小写。

接下来看看数据的排序情况。

test1中的排序情况

test3中的排序情况

可以看到test1的排序顺序是按照字典序来的,而test3的排序顺序则是按照ASCII码值排序的。

实际上做这么多,其实就是想说明一件事,在MySQL中,使用不同的校验规则,会带来不同的使用结果。

备份与恢复数据库

备份数据库

bash 复制代码
mysqldump -P[端口号] -u root -p 密码 -B 数据库名 > 数据库备份存储的文件路径

备份数据库的指令并非在MySQL程序中使用,而是在linux终端中使用,使用命令时,需要指明备份的数据库所在的mysqld的端口号,需要备份的数据库,以及备份的数据保存的路径。

比如我们将数据库test1备份到/root/MySQL/test1.sql中,首先我们查看一下mysqld的端口号(一般是3306,可以通过配置文件修改)

输入指令mysqldump -P 3306 -uroot -p -B test1 > /root/MySQL/test1.sql接着会提示你输入密码,如果是免密登录的话直接按下回车就行。

我们查看一下test1.sql,可以发现MySQL备份的数据库其实是记录下恢复数据库需要使用的SQL语句。

恢复数据库

恢复数据库则需要我们在mysql程序中使用SQL语句。

SQL 复制代码
source [数据库所在路径];

那么我们打开mysql,把数据库test1先删除,接着将备份的数据库/root/MySQL/test1.sql给恢复。输入指令``resource /root/MySQL/test1.sql

相关推荐
终焉代码15 分钟前
【Linux】进程初阶(1)——基本进程理解
linux·运维·服务器·c++·学习·1024程序员节
IT教程资源C31 分钟前
(N_156)基于springboot,vue小区物业管理系统
mysql·vue3·前后端分离·springboot小区物业
半路_出家ren1 小时前
MySQL数据库,DDL,DML,查询,权限,主从复制
数据库·mysql·主从复制·权限·ddl·dml
运维成长记1 小时前
Mysql的数据备份和高可用
数据库·mysql
IT技术与企业应用结合的爱好者1 小时前
c#using Oracle.ManagedDataAccess.Client 批量保存数据
数据库·oracle
l1t1 小时前
利用DeepSeek改写递归CTE SQL语句为Python程序及优化
数据库·人工智能·python·sql·算法·性能优化·deepseek
喵了meme1 小时前
Linux学习日记6:文件IO与标准IO
linux·c语言·学习
江湖一码农3 小时前
[小白]spring boot接入emqx
java·数据库·spring boot
HitpointNetSuite5 小时前
连锁餐饮行业ERP如何选择:为何Oracle NetSuite成为增长新引擎
大数据·运维·数据库·oracle·netsuite
冻咸鱼6 小时前
MySQL基础知识大全
数据库·mysql·oracle