02.struct

goer ... 2022-01-12 Mysql
  • Databases
  • Mysql
大约 7 分钟

结构

[toc]

# 结构

# 表引擎

MySQL的强大之处在于它的插件式存储引擎,我们可以基于表的特点使用不同的存储引擎,从而达到最好的性能。

show engines;可以查看到当前服务器支持的所有引擎。

使用哪一种引擎需要灵活选择,一个数据库中多个表可以使用不同引擎以满足各种性能和实际需求,
使用合适的存储引擎,将会提高整个数据库的性能
1
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

一行:一条记录

一列:一个字段

# 数据类型

在插入的数据中就要使用对应的数据类型

  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

  1. 浮点类型
浮点类型 所占字节 值范围
float(m, d) 4字节 单精度浮点型,m总个数,d小数位
double(m, d) 8字节 双精度浮点型,m总个数,d小数位
decimal(m, d) decimal是存储为字符串的浮点数

常用:实际使用过程中如果存在金额、钱精度要求比较高的浮点数存储,建议使用**decimal(定点数)**这个类型。

  1. 字符类型
字符类型 所占字节 值范围
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

text:存长文本

  1. 复合类型
复合类型 所占字节 值范围
set 集合类型 set(“member”, “member2″, … “member64″)
enum 枚举类型 enum(“member1″, “member2″, … “member65535″)

enum 带默认值的 前面我们的性别

  1. 时间类型

时间一般时int类型,存时间戳

# 字段其他属性

1. UNSIGNED(无符号)
主要用于整型和浮点类型,使用无符号。即,没有前面面的-(负号)。

2.default  默认值 赋予某个常量值

3. not null 只能插入空值,不能插入null

4. null  该列可以保持为空
1
2
3
4
5
6
7
8

# 索引

索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。

举例说明索引:如果把数据库中的某一张看成一本书,那么索引就像是书的目录,
可以通过目录快速查找书中指定内容的位置,对于数据库表来说,可以通过索引快速查找表中的数据。
1
2
3
4

# 优缺点

优:
    1.建立索引的列可以保证行的唯一性,生成唯一的rowId

    2.建立索引可以有效缩短数据的检索时间

    3.建立索引可以加快表与表之间的连接
    
缺:
    1.创建索引和维护索引需要时间成本,这个成本随着数据量的增加而加大

 	2.引也不易过多,索引越多写入,修改的速度越慢,会降低表的增删改的效率,
1
2
3
4
5
6
7
8
9
10
11

类型

索引类型 功能说明
普通索引 最基本的索引,它没有任何限制
唯一索引 某一行企用了唯一索引则不准许这一列的行数据中有重复的值。针对这一列的每一行数据都要求是唯一的
主键索引 它是一种特殊的唯一索引,不允许有空值。一般是在建表的时候同时创建主键索引,常用于用户ID。类似于书中的页码
全文索引 对于需要全局搜索的数据,进行全文索引

# 字符集

字符集是一套符合和编码

字符集确定了文字的存储方式。
字符集相当于是计算机中人类的语言。
1
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

GBK

GBK 向下与 GB 2312 编码兼容,向上支持 ISO 10646.1国际标准,
是前者向后者过渡过程中的一个承上启下的产物。
1
2

Unicode

Unicode(统一码、万国码、单一码)Unicode是国际组织制定的可以容纳世界上所有文字和符号的字符编码方案。
以满足跨语言、跨平台进行文本转换、处理的要求。
1
2

UTF-8

是一种针对Unicode的可变长度字符编码,也是万国码。
因为UNICODEASCII占用大一倍的空间,而对ASCII来说高字节的0对他毫无用处。
为了解决这个问题,就出现了一些中间格式的字符集,他们被称为通用转换格式,
即UTF(Universal Transformation Format)
1
2
3
4

在中文中常用的字符集分为utf-8和GBK

字符集 说明
gbk_chinese_ci 简体中文, 不区分大小写
utf8_general_ci Unicode (多语言), 不区分大小写