目录

数据库服务器、数据库和表的关系

连接服务

库的操作

查看数据库

编码格式

编码集

校验集

查看支持的规则

查看系统默认规则 

查看默认编码集

查看默认校验集

查看各种服务的默认校验集

创建数据库

if not exists

指定格式创建数据库

设置编码集

设置校验集

不同校验集的影响

编辑

示例

查看创建数据库时使用的命令

/*!40100 default.... */

数据库中数据存放位置 

数据库本质

反过来操作

删除数据库

选择数据库

本质

查看当前选择的数据库

修改数据库

如果显示没有权限

备份数据库

本质

-B 

恢复数据库

本质

查看数据库连接情况 

总结


数据库服务器、数据库和表的关系

如图:

(其中, DB指的是数据库)

mysql怎么绘制表间关系图 mysql关系图怎么创建_数据库

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

所以,我们首先需要连接上mysql

连接服务

mysql怎么绘制表间关系图 mysql关系图怎么创建_mysql_02

  • 如果不指定,就会使用配置文件中的默认选项
  • 之前我们的root用户并没有设置密码,所以登录时不需要-p:

接下来,介绍对库的操作

库的操作

查看数据库

show databases

  • 查看所有拥有的数据库
  • 注意这里是复数(因为一般会有多个)

在介绍创建数据库之前,我们先要了解一下编码集和校验集的概念

编码格式

编码集

存储时采用的编码格式

校验集

进行增删改查时,进行字段比较时使用的编码格式,也就是读取数据库内容时采用的编码方式

(存储用什么格式,读取就得用一样的格式,不然读不懂)

查看支持的规则

show charset

它会给出支持的编码集以及对应的校验集

mysql怎么绘制表间关系图 mysql关系图怎么创建_创建数据库_03

show collation

它会给出支持的校验集和对应的编码集,以及其他属性

mysql怎么绘制表间关系图 mysql关系图怎么创建_创建数据库_04

查看系统默认规则 

查看默认编码集

show variables like 'character_set_database' 

mysql怎么绘制表间关系图 mysql关系图怎么创建_mysql怎么绘制表间关系图_05

查看默认校验集

show variables like 'collation_database'

mysql怎么绘制表间关系图 mysql关系图怎么创建_mysql怎么绘制表间关系图_06

查看各种服务的默认校验集

show variables like 'collation_%'

mysql怎么绘制表间关系图 mysql关系图怎么创建_mysql_07

创建数据库

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 + 库名


mysql怎么绘制表间关系图 mysql关系图怎么创建_mysql怎么绘制表间关系图_08

/*!40100 default.... */

这个不是注释,它表示当前mysql版本如果大于4.01版本,就执行后面的语句

如果加上\G选项(还记得吗,是用来格式化显示的):

mysql怎么绘制表间关系图 mysql关系图怎么创建_mysql怎么绘制表间关系图_09

数据库中数据存放位置 

通过查看我们的mysql配置文件 -- /etc/my.cnf

  • 我们可以看到,有一个datadir,它就代表了存放mysql数据文件的路径
  • 查看这个路径下的文件:
  • 我们会发现,它里面的标蓝色的文件名,怎么正好和我们拥有的数据库名字相同呢?
数据库本质
  • 因为,标蓝色就代表这个文件是个目录文件
  • 所以,我们创建数据库,本质上其实就是在mysql专门保存数据的目录下,创建了个目录文件
  • 所以,数据库本质上也是个文件
反过来操作

那如果我们直接在/var/lib/mysql下创建一个目录,会怎么样呢?

mysql怎么绘制表间关系图 mysql关系图怎么创建_数据库_10

mysql怎么绘制表间关系图 mysql关系图怎么创建_mysql_11

会发现,反过来操作也是可以的

但是!!!!可以不代表它合理!

  • 既然我们数据库的底层依靠了文件系统,那么我们就不应该反过来操作,老老实实使用它规定的sql语句即可,不然它被设计出来是为了什么呢?
  • 了解底层,是为了让我们更好的理解它,从而使用它,而不是越过它直接操作底层

删除数据库

drop database  + 库名

mysql怎么绘制表间关系图 mysql关系图怎么创建_数据库_12

删除数据库的操作一定要慎重,删除了数据库,相应的数据也会被删除

选择数据库

use + 库名

  • 从前面介绍的这个关系图可以知道,一个数据库可以对应多个表
  • 那么,如果我们要对表进行操作,肯定要先选择某个数据库

本质

  • 从前面介绍的,数据库的本质是目录文件,可以判断出 -- 选择数据库,本质上就是选择进入哪一个目录
  • 那么,我们自然也可以推出,表其实就是普通文件
  • 毕竟我们在目录中操作的,肯定就是普通文件了

查看当前选择的数据库

select database()

mysql怎么绘制表间关系图 mysql关系图怎么创建_数据库_13

(有时候我们可能会忘记自己当前选择了哪个数据库)

修改数据库

alter database + 库名 + 要修改的属性

如果显示没有权限

mysql怎么绘制表间关系图 mysql关系图怎么创建_mysql_14

其实是因为,在mysql数据存放的路径下,这个目录的拥有者是root,而不是mysql用户

mysql怎么绘制表间关系图 mysql关系图怎么创建_数据库_15

我们修改权限后,就可以正常使用了:

mysql怎么绘制表间关系图 mysql关系图怎么创建_数据库_16

我们可以修改d2的编码集:

mysql怎么绘制表间关系图 mysql关系图怎么创建_mysql_17

 

备份数据库

mysqldump -p 3306 -u root -p 密码 -B 数据库名 > 数据库备份存储的文件路径

  • 需要我们手动设置生成的.sql文件:
  • 注意,这里是在shell下执行的,而不是在mysql服务中
  • 使用相对路径也可:

本质

保存了历史对数据库的有效操作

  • 当我们查看生成的.sql文件的内容:
  • 会发现它文件的内容,正是我们曾经对这个数据库的一系列操作
  • 说明,mysql会记录下我们的历史操作,并且在进行备份时,将记录的数据写入./sql文件
  • 那么,自然也可以推断出,恢复数据库的原理就是 -- 重新执行一遍记录下的操作

-B 

  • 如果我们不使用-B选项,会发现,在我们建表之前,并没有建立数据库和选择该数据库的语句
  • 而使用了-B选项的d2.sql文件是记录了的

mysql怎么绘制表间关系图 mysql关系图怎么创建_mysql_18

说明,如果不使用-B选项,恢复数据库时,需要我们手动建库和选择库

恢复数据库

source + 要恢复的./sql文件所在路径

本质

前面已经分析了,恢复数据库的原理就是 -- 重新执行一般.sql文件记录的操作

既然重新执行了一遍,自然数据库就和原来的一样了,也就实现了恢复数据库

查看数据库连接情况 

show processlist

可以查看,当前的数据库有几个用户正在连接:

mysql怎么绘制表间关系图 mysql关系图怎么创建_mysql怎么绘制表间关系图_19

总结

  • 以上工作,均是由mysql做的,我们只是通过mysql语句下达了指令
  • 所以,数据库实际上就是一堆文件,只是这些文件不由我们直接操作,是数据库服务帮我们去操作的