目录
MySQL三大范式、存储引擎、数据库类型、数据类型
人就是这样,只有受伤了,才知道身体健康有多重要;
只有经受了一些磨难,才知道生活有多美好;
只有遇到了生活的裂缝,才知道阳光有多温暖。
快来加入我们的互动学习群吧,与我们一起成长和进步吧! QQ交流群:948912943
E-R图
数据库设计的图像表达方式(E-R,Entity Relationship)
实体(Entity)
属性:实体的特征
联系:两各或多个实体之间的关联关系
E-R图的的组成
(1)矩形表示实体集
(2)椭圆形表示属性
(3)菱形表示联系集
(4)直线用来连接属性和实体集。也用来连接实体集和联系集
三大范式(Normal Formal)
(1)第一范式(1NF)
要求每列必须是最小的原子单位,即不能再细分
(2)第二范式(2NF)
要求每列必须和主键相关,不相关的列放到别的表中,即要求一个表只描述一件事情
(3)第三范式(3NF)
要求表中的各列必须和主键直接相关。不能直接相关
即需要拆分客房信息表为客房表、客房状态表、客房类型表
MySQL储存引擎
MySQL支持的存储引擎
MySQL支持的存储引擎有InnoDB、MyISAM、Memory、Merge、Archive、CSV、BLACKHOLE等
命令 | 描述 |
---|---|
show engines; | 查看系统所支持的引擎类型 |
Support列的值表示某种引擎是否能使用,YES表示可以使用,NO表示不能使用,DEFAULT表示该引擎为当前默认的存储引擎
存储引擎 | 描述 |
---|---|
ARCHIVE | 用于数据存档的引擎,数据被插入后就不能在修改了,且不支持索引。 |
CSV | 在存储数据时,会以逗号作为数据项之间的分隔符。 |
BLACKHOLE | 会丢弃写操作,该操作会返回空内容。 |
FEDERATED | 将数据存储在远程数据库中,用来访问远程表的存储引擎。 |
InnoDB | 具备外键支持功能的事务处理引擎 |
MEMORY | 置于内存的表 |
MERGE | 用来管理由多个 MyISAM 表构成的表集合 |
MyISAM | 主要的非事务处理存储引擎 |
NDB | MySQL 集群专用存储引擎 |
有几种存储引擎的名字还有同义词,例如:MRG_MyISAM和NDBCLUSTER分别是MERGE和NDB的同义词。存储引擎MEMORY和InnoDB在早期分别称为HEAP和Innobase。虽然后面两个名字仍能被识别,但是已经被废弃了
InnoDB和MyISAM储存引擎比较
InnoDB(默认) | MyISAM | |
---|---|---|
支持事务 | 支持 | 不支持 |
支持全文索引 | 不支持 | 支持 |
外键约束 | 支持 | 不支持 |
表空间大小 | 较大 | 较小 |
数据行锁定 | 支持 | 不支持 |
(1)MyISAM储存引擎
不支持事务,也不支持外键,访问速度比较快,因此对不需要事务处理,以访问为主的应用适合使用该引擎
(2)InnoDB储存引擎(默认)
在事务处理上有优势,即支持具有提交,回滚和崩溃恢复能力的事务安装,所以比MyISAM引擎占用更多的磁盘空间,因此需要进行频繁的更新、删除操作,同时还对事务的完整性要求比较高,需要实现并发控制,适合使用该储存引擎
查看当前的默认储存引擎
Show variables like ‘storage_engine%’
修改默认储存引擎
如需修改默认储存引擎,可以通过配置向导,也可以通过配置文件my.ini来实现
修改my.ini
my.ini是隐藏文件,在C:\ProgramData\MySQL\MySQL Server 8.0目录下
default-storage-engine=InnoDB
如需将默认储存引擎改为MyISAM,只需修改default-storage-engine参数值为MyISAM即可,重启服务后生效
指定表的储存引擎
数据表默认使用当前MySQL的默认储存引擎,有时为了达到数据表的特殊功能的要求,也可以重新设置表的储存类型
create table 表名(
#省略代码
)engine=储存引擎;
MySQL数据文件
(1)文件的储存位置
不同操作系统的默认储存位置不同,可通过配置my.ini文件中的参数datadir获取或修改该路径
(2)MyISAM类型的表文件
进入datadir指定的文件夹,有类型为MyISAM的表myisam的数据文件有三个,扩展名为frm、MYI、MYD
MyISAM引擎表文件类型 | 描述 |
---|---|
frm | 表结构定义文件。其主要存放表的元数据,包括表结构定义信息等。与储存引擎无关,任何储存类型都有 |
myi | 表索引文件。主要存放MyISAM类型表的索引信息,每个MyISAM类型的表有一个MYI文件,存放位置和frm相同 |
myd | 表数据文件。存放表中数据文件 |
(3)InnoDB类型的表文件
datadir指定的数据库文件目录下,InnoDB类型的表innodb.frm相关文件如下
InnoDB引擎表文件类型 | 描述 |
---|---|
frm | 表结构定义文件 |
ibd | 索引 + 部分表数据 |
ibdata1 | 所有表共享空间,数据文件。其保存所有InnoDB类型表的数据。这个文件保存位置与frm不同可以通过my.ini文件中的参数innodb_data_home_dir查询或修改 |
MySQL数据库类型
系统数据库
数据库类型 | 描述 |
---|---|
information_schema | 主要储存系统中的一些数据库对象信息;如用户表信息、字段信息、权限信息、字符集信息、分区信息 |
performance_schema | 主要储存数据库服务器性能参数 |
mysql | 主要储存系统的用户权限信息 |
test | 数据库管理系统自动创建的测试数据库,任何用户都可以使用 |
MySQL数据类型
数值类型
数据类型 | 字节数 | 取值范围 |
---|---|---|
tinyint[(M)] | 1字节 | 有符号值:-27~27 无:0~2^8-1 |
smallint[(M)} | 2字节 | 有:-215~215-1 无:0~2^16-1 |
Mediumint | 3字节 | 有:-223~223-1 无:0~2^23-1 |
int[(M)] | 4字节 | 有:-231~231-1 无:0~2^32-1 |
float[(M,D)] | 4字节 | 有:-3.4028+38~-1.175 |
Double[(M,D)] | 8字节 | |
Decimal[(M[D])] | M+2字节 |
字符串类型
数据类型 | 字节数 |
---|---|
Char[(M)] | M字节 (字符) |
Varchar[(M)] | 可变长度 |
Tinytext | 0~255 |
Text | 0~65535 |
enum() | 枚举,数据值只能是()中的值 |
日期类型
数据类型 | 格式 |
---|---|
Date | YYYY-MM-DD |
Datetime | YY-MM-DD hh:mm:ss |
Time | hh:mm:ss |
Timestamp | YYYYMMDDHHMMSS:年月日时分秒 |
Year | YYYY格式年份 |