Row Format行格式
指数据记录(或者称之为行)在磁盘中的物理存储方式。具体地,对于InnoDB存储引擎而言,常见的行格式类型有Compact、Redundant、Dynamic和Compressed
设置、修改行格式信息
在创建、修改数据表的时候,可以显式地指定row format行格式。SQL语句语法如下
-- 创建数据表时,显示指定行格式
CREATE TABLE 表名 (列的信息) ROW_FORMAT=行格式名称;
-- 创建数据表时,修改行格式
ALTER TABLE 表名 ROW_FORMAT=行格式名称;
与此同时,如果需要查看某数据表的行格式,可通过如下语句实现
show table status from 数据库名 like '<数据表名>';
show table status from cloperationsreportsdb like 'groupbusioverview';
Compact 行格式
Compact行格式在MySQL 5.0中被引入,其目标是为了更高效的存储数据记录。在该格式下,一条数据记录的组成部分如下所示。其大体分为两部分——记录的额外信息、记录的数据内容。后者比较好理解,其即是我们存储到数据库的各列(字段)数据值。而前者则是MySQL为了更好描述该条记录而添加的额外信息
Redundant 行格式
Redundant作为MySQL 5.0之前使用的一种行格式,其示意图如下所示,可以看到其与compact行格式在结构上大体还是比较相似的。这里主要来介绍下其与compact行格式不同之处
Dynamic、Compressed行格式
对于Dynamic、Compressed行格式而言,其和compact行格式比较相似。不同的在于,对待处理行溢出的处理及策略,Dynamic、Compressed行格式会把记录中数据量过大的字段值全部存储到溢出页中,而不会在该记录的数据内容的相应字段处存储该字段值前768个字节的数据了。而compressed相比较dynamic行格式来说,前者会使用压缩算法对所有页面(自然也包括溢出页)进行压缩以减少存储占用
行溢出
众所周知,InnoDB存储引擎中内存与硬盘交互的基本单位是页,一般 页大小为16KB。 MySQL规定一个页中至少需要存放两条记录。
而所谓的行溢出是指:当某个记录的某个字段(varchar、text、blob等类型)的值长度过长、数据量过大,会导致一个页中放不下一条记录,为此在compact、redundant行格式中,如果该记录某字段中数据量过多时,则在该记录的数据内容的相应字段处 只存储该字段值前768个字节的数据和 一个指向存储剩余数据的其他页(即所谓的溢出页)的地址,该地址通常占用20个字节
Mysql表名 字段名最长长度
- 数据库名字最长为 < 64字符
- 数据表名字最长为 < 64字符
- 字段名字最长为 < 64字符
建议 不超过 12 个字符 参考《阿里巴巴java开发手册》
表名、字段名必须使用小写字母或数字,禁止出现数字开头,禁止两个下划线中间只出现数字。字段名称需要慎重考虑。
| 数据类型 | 默认长度 | 最大长度 |
|---|---|---|
| varchar | 255 | 65535 |
| char | 255 | 65535 |
| double | 0 | 255 |
| float | 0 | 255 |
| int | 11 | 255 |
| tinyint | 4 | 255 |
| bigint | 20 | 255 |
| date | 0 | 0 |
| datetime | 0 | 0 |
| text | 0 | 0 |
注意 order_no int(5) unsigned zerofill DEFAULT NULL 当字段长度小于5时将会用‘0’补齐;