MariaDB数据库的使用
- 前期准备
- 数据库操作
- MySQL 的连接原理
- 基本操作
- 校对规则
- 删库
首先对于Centos7的系统,他是自带的MariaDB数据库的,可以使用
1 | sudo rpm -qa | grep mariadb |

但是阿里云服务器中好像是没有这个数据库的,需要自己下载;如果虚拟机中的MariaDB数据库中缺少什么东西,再下载就好了
1 2 | yum -y install mariadb-devel yum -y install mariadb-server |
前期准备
- 查看
mariadb 数据库的状态
1 | service mariadb status |

- 关闭
mariadb 数据库服务
1 | service mariadb stop |

- 开启
mariadb 数据库服务
1 | service mariadb start |

中间所需要使用的密码是
- 配置登录文件
一开始的时候,我们没有设置数据库的登录密码,可以使用这个方式,先跳过登录时的权限验证,等到成功登录后,再进行设置登录密码。
1 2 3 4 | sudo vim /etc/my.cnf //插入 skip-grant-tables #跳过数据库权限验证 |
这样就可以免密登录数据库了

- 重启数据库
1 | service mariadb restart |
- 查看版本信息
1 | select version(); |
数据库操作
- 登录数据库
1 | mysql -u root |

- 切换到MySQL数据库
1 | use mysql |

- 更新数据库的登录密码
1 2 | update user set password=password('新的密码') where user='root' and host='localhost'; |
刷新MySQL权限相关的表
1 | flush privileges; |

- 退出数据库
1 | quit; |
- 使用密码进行登录数据库
先在

在重启
1 | mysql -u root -p |
这里的密码和root用户登录时的密码一样,都是不会显示出来的

MySQL 的连接原理
MySQL所占用的端口号为
1 | netstat -anp | grep 3306 |

可以看到他使用的
我们在启动MySQL服务端时,会先启动守护进程
1 | ps aux | grep mysqld |


- 选择连接的协议:
当客户端发起连接的时候,服务端的处理过程
连接层中:
- 用户验证
- 选择连接的协议
我们在自己的主机上连接的时候,也就是本地的MySQL客户端,那么是不用走网络协议栈的,只是通过域套接字来完成客户端与服务端的进程间通信

我们在linux下进行连接
域套接字
就是创建的一个文件,然后客户端和服务端通过这个文件来进行通信(也就是

因为通信是通过文件来完成的,所以接收数据和发送数据使用的是文件操作,
- 创建线程对客户端进行服务(多线程通信)
server层中:
- 检查SQL语句的语法是否正确
- 语义分析
- 权限检查,判断当前用户是否有对该表操作的权限
- 分析SQL语句的查找方案,选择一个执行效率最高的方案
- 执行SQL语句 --》
存储引擎去执行
存储引擎
相当于是一个Linux操作系统中的文件文件系统。不同的存储引擎,可以决定着数据的存储方式,索引类型,事务等方式。
而其中的数据都是在磁盘中的。
基本操作
sql语句即为结构化的查询语句,其中数据库定义语言(DDL),数据库操作语言(DCL),数据库修改语言(DML)
- 使用数据库
1 | use [数据库的名称]; #可以切换数据库 |
- 查看当前数据库中的数据表
1 | show tables; |
- 数据库的创建
1 | create database [数据库的名称] charset=[字符集]; |
- 查看创建的数据库的过程
1 | show create database [数据库的名称]; |

如果MySQL的版本大于4.0,就默认采用latin1字符格式。
常见的几个字符集
- ASCII字符集:采用的是1个字节的低7位表示字符,高位始终为0
- LATIN1字符集:相对于ASCII字符集而言,他启动了最高位
- GBK字符集:支持了中文字符,字符所占的大小为1个字节或者2个字节
- UTF8字符集:Unicode字符集,他支持所有国家的文字字符,用1-4个字节来表示字符大小。

当我们使用默认的字符集的时候,我们对一个表中插入中文字符,就会显示为乱码的格式。
这就是因为中文字符一般都是1-4个字节,但是默认的LATIN1字符集却只有一个字节的大小,就会发生截取的现象,读取后就会出现乱码。(本来是一个数据,却被分成了几份显示)

发生乱码的原因就是前后端字符集不匹配
- 查询数据库中的字符集格式
1 | show variables like '%character%'; |

校对规则
校对规则有什么用呢? 当我们想要对插入的数据进行排序的时候,如果数据是一个(dcl)和(DCL),那么该怎么进行排序。。。。
校对规则的种类
- 区分大小写,他的规则的后缀为
_cs - 不区分大小写,他的规则的后缀为
_ci - 后缀为
_bin ,表示以二进制进行区分,这也是大小写敏感的
1 | show collation; # 查看校对规则 |
校对规则的特征:
- 不同的字符集有不同的校对规则
- 每一个字符集都有自己的默认校对规则
(UTF8字符集的默认校对规则为utf8_general_ci ),不区分大小写
MySQL 是不区分大小写的
1 2 | create databases [数据库名称] collate [校对规则]; |

删库
1 | drop database [数据库名称]; |
注意:删除的数据库如果没有备份,那么是不可能进行还原的。(跟linux中的 rm 命令是一个道理)
- 数据库的备份
1 | mysqldump -P[端口] -u[用户] -p[密码] -B[数据库的名称] > 数据库备份存储文件的路径; |

然后这个.sql的文件中,所存储的就是在这个数据库中所有执行的语句
- 备份的还原
1 | source [备份数据库文件的路径,相对路径,绝对路径都可以]; |

- 表备份
1 | mysqldump -P[端口] -u[用户] -p[密码] 数据库名称 表1 表2... > 数据表备份存储的文件路径; |