索引组织表:
在InnoDB存储引擎中,表都是根据主键顺序组织存放的,这种存储方式的表称为索引组织表(index organized table)。
在创建表时若未显式地定义主键,则InnoDB存储引擎会按照如下方式选择或创建主键。
InnoDB逻辑存储结构:
从InnoDB存储引擎的逻辑存储结构看,所有数据都被逻辑地存放在同一个空间中,称为表空间tablespace。表空间又由段segment、区extent、页page组成。页在一些文档中也称为块。页中是一行行的数据。
表空间:
InnoDB存储引擎逻辑结构的最高层,所有数据都存放在表空间中。
段:
表空间由各个段组成。常见的段有数据段、索引段、回滚段等。
区:
连续页组成的空间,在任何情况下每个区的大小都为1MB.为了保证区中页的连续性,InnoDB引擎一次从磁盘申请4~5个区。默认一个页有16KB,即一个区中一共有64个连续的页。
页:
也称为块,是InnoDB磁盘管理的最小单位。默认16KB,可以自行设置。
常见的页类型有:数据页、undo页、系统页、事务数据页、插入缓冲位图页、插入缓冲空闲列表页、未压缩的二进制大对象页、压缩的二进制大对象页。
行:
数据按行存放。每个页存放的记录也是硬性定义的,最多存放16KB/2-200行的记录。
Compat行记录格式:
变长字段列表 | NULL标志位 | 记录头信息 | 列1数据 | 列2数据 |。。。
Redundant行记录格式:
字段长度偏移列表 | 记录头信息 | 列1数据 | 列2数据 | 列3数据 |。。。
约束:
1. 完整性约束
数据完整性:
实体完整性保证表中只有一个主键。有以下三种形式:实体完整性保证表中有一个主键。primary key或unique key。用户还可以编写一个触发器来保证数据完整性。
域完整性宝成数据每列的值满足特定的条件。有以下几种途径:合适的数据类型、外键约束、编写触发器、还可以考虑用DEFAULT约束作为强制域完整性的一个方面。
参照完整性保证两张表之间的关系。InnoDB支持外键,因此允许用户定义外键以强制参照完整性,也可以通过编写触发器强制执行。
对于InnoDB存储引擎来说,提供以下几种约束:
primary key; unique key; foregin key; default; NOT NULL;
约束在表建立时进行约束定义或利用ALTER TABLE命令来进行创建约束。
unique key唯一索引,可以通过CREATE UNIQUE INDEX来建立。