02.struct
goer ... 2022-01-12 大约 7 分钟
[toc]
# 结构
# 表引擎
MySQL的强大之处在于它的插件式存储引擎,我们可以基于表的特点使用不同的存储引擎,从而达到最好的性能。
show engines;可以查看到当前服务器支持的所有引擎。
使用哪一种引擎需要灵活选择,一个数据库中多个表可以使用不同引擎以满足各种性能和实际需求,
使用合适的存储引擎,将会提高整个数据库的性能
1
2
3
4
2
3
4
# 1.MyISAM
MyISAM 存储引擎独立于操作系统
1.不支持事务,但是并不代表着有事务操作的项目不能用MyISAM存储引擎, 可以在service层进行根据自己的业务需求进行相应的控制。 2.不支持外键。 3.查询速度很快,如果数据库insert和update的操作比较多的话比较适用。 4.对表进行加锁。1
2
3
4
5
# 2. InnoDB
InnoDB看做是MyISAM的一种更新换代产品 (常用)
支持事务1崩溃恢复:在发生崩溃后,InnoDB数据表能够迅速地自动恢复到一个稳定可用的状态1
# 3.NDBCluster
分布式存储引擎 支持事务 内存需求量巨大1
2
3具有非常高的并发需求1
一行:一条记录
一列:一个字段
# 数据类型
在插入的数据中就要使用对应的数据类型
- 整型
| 整型 | 所占字节 | 值范围 |
|---|---|---|
| tinyint | 1字节 | -128~127 |
| smallint | 2字节 | -32768~32767 |
| mediumint | 3字节 | -8388608~8388607 |
| int | 4字节 | 范围-2147483648~2147483647 |
| bigint | 8字节 | ±9.22*10的18次方 |
常用的:int tinyint
- 浮点类型
| 浮点类型 | 所占字节 | 值范围 |
|---|---|---|
| float(m, d) | 4字节 | 单精度浮点型,m总个数,d小数位 |
| double(m, d) | 8字节 | 双精度浮点型,m总个数,d小数位 |
| decimal(m, d) | decimal是存储为字符串的浮点数 |
常用:实际使用过程中如果存在金额、钱精度要求比较高的浮点数存储,建议使用**decimal(定点数)**这个类型。
- 字符类型
| 字符类型 | 所占字节 | 值范围 |
|---|---|---|
| CHAR | 0-255字节 | 定长字符串 |
| VARCHAR | 0-255字节 | 变长字符串 |
| TINYBLOB | 0-255字节 | 不超过255个字符的二进制字符串 |
| TINYTEXT | 0-255字节 | 短文本字符串 |
| BLOB | 0-65535字节 | 二进制形式的长文本数据 |
| TEXT | 0-65535字节 | 长文本数据 |
| MEDIUMBLOB | 0-16 777 215字节 | 二进制形式的中等长度文本数据 |
| MEDIUMTEXT | 0-16 777 215字节 | 中等长度文本数据 |
| LOGNGBLOB | 0-4 294 967 295字节 | 二进制形式的极大文本数据 |
| LONGTEXT | 0-4 294 967 295字节 | 极大文本数据 |
| VARBINARY(M) | 允许长度0-M个字节的定长字节符串 | 值的长度+1个字节 |
| BINARY(M) | M | 允许长度0-M个字节的定长字节符串 |
常用的:
char() : 0-255 指定长度小的值将会用空格作填补。
varchar() :可以根据实际内容动态改变存储值的长度 节约磁盘空间、提高存储效率
4.0版本以下,varchar(20),指的是20字节,如果存放UTF8汉字时,只能存6个(每个汉字3字节)
5.0版本以上,varchar(20),指的是20字符,无论存放的是数字、字母还是UTF8汉字(每个汉字3字节),
1
2
2
text:存长文本
- 复合类型
| 复合类型 | 所占字节 | 值范围 |
|---|---|---|
| set | 集合类型 | set(“member”, “member2″, … “member64″) |
| enum | 枚举类型 | enum(“member1″, “member2″, … “member65535″) |
enum 带默认值的 前面我们的性别
- 时间类型
时间一般时int类型,存时间戳
# 字段其他属性
1. UNSIGNED(无符号)
主要用于整型和浮点类型,使用无符号。即,没有前面面的-(负号)。
2.default 默认值 赋予某个常量值
3. not null 只能插入空值,不能插入null
4. null 该列可以保持为空
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# 索引
索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。
举例说明索引:如果把数据库中的某一张看成一本书,那么索引就像是书的目录,
可以通过目录快速查找书中指定内容的位置,对于数据库表来说,可以通过索引快速查找表中的数据。
1
2
3
4
2
3
4
# 优缺点
优:
1.建立索引的列可以保证行的唯一性,生成唯一的rowId
2.建立索引可以有效缩短数据的检索时间
3.建立索引可以加快表与表之间的连接
缺:
1.创建索引和维护索引需要时间成本,这个成本随着数据量的增加而加大
2.引也不易过多,索引越多写入,修改的速度越慢,会降低表的增删改的效率,
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
类型
| 索引类型 | 功能说明 |
|---|---|
| 普通索引 | 最基本的索引,它没有任何限制 |
| 唯一索引 | 某一行企用了唯一索引则不准许这一列的行数据中有重复的值。针对这一列的每一行数据都要求是唯一的 |
| 主键索引 | 它是一种特殊的唯一索引,不允许有空值。一般是在建表的时候同时创建主键索引,常用于用户ID。类似于书中的页码 |
| 全文索引 | 对于需要全局搜索的数据,进行全文索引 |
# 字符集
字符集是一套符合和编码
字符集确定了文字的存储方式。
字符集相当于是计算机中人类的语言。
1
2
2
| 字符集 | 说明 | 字节长度 |
|---|---|---|
| ASCII | 美国标准信息交换代码 | 单字节 |
| GBK | 汉字内码扩展规范 | 双字节 |
| unicode | 万国码 | 4字节 |
| UTF-8 | Unicode的可变长度字符编码 | 1到6个字节 |
ASCII
标准ASCII 码
7 位或8 位二进制数组合来表示128 或256 种可能的字符。
0~31及127(共33个)是控制字符或通信专用字符(其余为可显示字符),
如控制符:LF(换行)、CR(回车)、FF(换页)、DEL(删除)、BS(退格)、BEL(响铃)等;
通信专用字符:SOH(文头)、EOT(文尾)、ACK(确认)等;
ASCII值为8、9、10 和13 分别转换为退格、制表、换行和回车字符。
它们并没有特定的图形显示,但会依不同的应用程序,而对文本显示有不同的影响。
32~126(共95个)是字符(32是空格),其中48~57为0到9十个阿拉伯数字。
65~90为26个大写英文字母,97~122号为26个小写英文字母,其余为一些标点符号、运算符号等
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
GBK
GBK 向下与 GB 2312 编码兼容,向上支持 ISO 10646.1国际标准,
是前者向后者过渡过程中的一个承上启下的产物。
1
2
2
Unicode
Unicode(统一码、万国码、单一码)Unicode是国际组织制定的可以容纳世界上所有文字和符号的字符编码方案。
以满足跨语言、跨平台进行文本转换、处理的要求。
1
2
2
UTF-8
是一种针对Unicode的可变长度字符编码,也是万国码。
因为UNICODE比ASCII占用大一倍的空间,而对ASCII来说高字节的0对他毫无用处。
为了解决这个问题,就出现了一些中间格式的字符集,他们被称为通用转换格式,
即UTF(Universal Transformation Format)
1
2
3
4
2
3
4
在中文中常用的字符集分为utf-8和GBK
| 字符集 | 说明 |
|---|---|
gbk_chinese_ci | 简体中文, 不区分大小写 |
utf8_general_ci | Unicode (多语言), 不区分大小写 |