目录
表
表就是关于特定实体的数据集合,这是关系型数据库模型的核心。
索引组织表
在InnoDB存储引擎中,表都是根据主键顺序组织存放的,这种存储方式的表称为索引组织表(index organized table)。在 InnoDB 存储引擎表中,每张表都有个主键(Primary Key),如果在创建表时没有显式地定义主键,则 InnoDB 存储引擎会按如下方式选择或创建主键:
- 首先判断表中是否有非空的唯一索引(Unique NOT NULL),如果有,则该列即为主键。
- 如果不符合上述条件, InnoDB存储引擎自动创建一个6字节大小的指针。
当表中有多个非空唯一索引时,InnoDB 存储引擎将选择建表时第一个定义的非空唯一索引为主键。这里需要非常注意的是,主键的选择根据的是定义索引的顺序,而不是建表时列的顺序。看下面的例子:
CREATE TABLE z(
a INT NOT NULL,
b INT NULL,
c INT NOT NULL,
d INT NOT NULL,
UNIQUE KEY(b),
UNIQUE KEY(d),
UNIQUE KEY(c)
)ENGINE=INNODB,CHARSET=utf8;
//插入几条数据
INSERT INTO z SELECT 1,2,3,4;
INSERT INTO z SELECT 5,6,7,8;
INSERT INTO z SELECT 9,10,11,12;
上述示例创建了一张表 z,有a、b、c、d 四个列。b、c、d 三列上都有唯一索引,不同的是 b 列允许 NULL 值。由于没有显式地定义主键,因此会选择非空的唯一索引,可以通过下面的SQL语句判断表的主键值:
//查询情况,_rowid可以判断主键是哪一列
SELECT a,b,c,d,_rowid FROM z;