目录
如图:
(其中, DB指的是数据库)
- 所谓安装数据库,只是在机器上安装了一个数据库管理系统程序,这个管理程序可以管理多个数据库,一般开发人员会针对每一个应用创建一个数据库
- 为保存应用中实体的数据,一般会在数据库中创建多个表,以保存程序中实体的数据
所以,我们首先需要连接上mysql
- 如果不指定,就会使用配置文件中的默认选项
之前我们的root用户并没有设置密码,所以登录时不需要-p:
接下来,介绍对库的操作
show databases
- 查看所有拥有的数据库
- 注意这里是复数(因为一般会有多个)
在介绍创建数据库之前,我们先要了解一下编码集和校验集的概念
编码集
存储时采用的编码格式
校验集
进行增删改查时,进行字段比较时使用的编码格式,也就是读取数据库内容时采用的编码方式
(存储用什么格式,读取就得用一样的格式,不然读不懂)
show charset
它会给出支持的编码集以及对应的校验集
show collation
它会给出支持的校验集和对应的编码集,以及其他属性
查看默认编码集
show variables like 'character_set_database'?
查看默认校验集
show variables like 'collation_database'
查看各种服务的默认校验集
show variables like 'collation_%'
create database + (if not exists)?+ 库名 + 属性
if not exists
- 用于保证用户不会创建同名数据库
- 如果已经存在,会有一个警告
设置编码集
- charset = 格式名?
- character set 格式名
设置校验集
- collate?格式名
- collate =?格式名
如果不手动设置,会使用配置文件中的默认编码格式
- 从前面可以看到,我们的默认校验集是utf8_general_ci,它是不区分大小写的
- 那么我们再创建一个使用utf8_bin校验集的数据库d1?(它可以区分大小写)
示例
- 我们建立一个表,插入一些数据,来看看,不同的校验集对数据搜索的结果有何影响
- 分别在两个数据库中建立相同的表,然后在表中插入a和A字符:
- 分别在两个数据库的表中搜索a,会发现,出现的结果不同:
- 我们这样就验证出了,不同的校验集,会对查询结果产生影响
- 所以,我们在选择校验集时,需要仔细考虑我们的使用场景
show?create database + 库名
/*!40100 default.... */
这个不是注释,它表示当前mysql版本如果大于4.01版本,就执行后面的语句
如果加上\G选项(还记得吗,是用来格式化显示的):
通过查看我们的mysql配置文件 -- /etc/my.cnf
- 我们可以看到,有一个datadir,它就代表了存放mysql数据文件的路径
- 查看这个路径下的文件:
- 我们会发现,它里面的标蓝色的文件名,怎么正好和我们拥有的数据库名字相同呢?
数据库本质
- 因为,标蓝色就代表这个文件是个目录文件
- 所以,我们创建数据库,本质上其实就是在mysql专门保存数据的目录下,创建了个目录文件
- 所以,数据库本质上也是个文件
反过来操作
那如果我们直接在/var/lib/mysql下创建一个目录,会怎么样呢?
会发现,反过来操作也是可以的
但是!!!!可以不代表它合理!
- 既然我们数据库的底层依靠了文件系统,那么我们就不应该反过来操作,老老实实使用它规定的sql语句即可,不然它被设计出来是为了什么呢?
- 了解底层,是为了让我们更好的理解它,从而使用它,而不是越过它直接操作底层
drop database? + 库名
删除数据库的操作一定要慎重,删除了数据库,相应的数据也会被删除
use + 库名
- 从前面介绍的这个关系图可以知道,一个数据库可以对应多个表
- 那么,如果我们要对表进行操作,肯定要先选择某个数据库
本质
- 从前面介绍的,数据库的本质是目录文件,可以判断出 -- 选择数据库,本质上就是选择进入哪一个目录
- 那么,我们自然也可以推出,表其实就是普通文件
- 毕竟我们在目录中操作的,肯定就是普通文件了
select database()
(有时候我们可能会忘记自己当前选择了哪个数据库)
alter database + 库名 + 要修改的属性
如果显示没有权限
其实是因为,在mysql数据存放的路径下,这个目录的拥有者是root,而不是mysql用户
我们修改权限后,就可以正常使用了:
我们可以修改d2的编码集:
?
mysqldump?-p 3306 -u root -p 密码 -B 数据库名 > 数据库备份存储的文件路径
- 需要我们手动设置生成的.sql文件:
- 注意,这里是在shell下执行的,而不是在mysql服务中
- 使用相对路径也可:
本质
保存了历史对数据库的有效操作
- 当我们查看生成的.sql文件的内容:
- 会发现它文件的内容,正是我们曾经对这个数据库的一系列操作
- 说明,mysql会记录下我们的历史操作,并且在进行备份时,将记录的数据写入./sql文件
- 那么,自然也可以推断出,恢复数据库的原理就是 -- 重新执行一遍记录下的操作
-B?
- 如果我们不使用-B选项,会发现,在我们建表之前,并没有建立数据库和选择该数据库的语句
- 而使用了-B选项的d2.sql文件是记录了的
说明,如果不使用-B选项,恢复数据库时,需要我们手动建库???????和选择库
source + 要恢复的./sql文件所在路径
本质
前面已经分析了,恢复数据库的原理就是 -- 重新执行一般.sql文件记录的操作
既然重新执行了一遍,自然数据库就和原来的一样了,也就实现了恢复数据库
show processlist
可以查看,当前的数据库有几个用户正在连接:
- 以上工作,均是由mysql做的,我们只是通过mysql语句下达了指令
- 所以,数据库实际上就是一堆文件,只是这些文件不由我们直接操作,是数据库服务帮我们去操作的