mysql innodb 索引组织表_Mysql InnoDB引擎 -索引组织表

InnoDB存储引擎的表以主键顺序组织,若未显式定义主键,会选择非空唯一索引作为主键。如果没有这样的索引,会自动生成6字节的指针。在有多个非空唯一索引时,会选取创建时的第一个。例如,表z在没有显式主键的情况下,非空唯一索引d将成为主键。_rowid可用于查看单列主键,但无法显示多列主键信息。
摘要由CSDN通过智能技术生成

在InnoDB 存储引擎中,表都是根据主键顺序组织存放的,这种存储方式的额表称为索引组织表。在InnoDB存储引擎表中,每张表都有个主键(Primary key),如果在创建表时 没有显示地定义主键,则InnoDB存储引擎会按如下方式选择或创建主键:

首先判断表是否有非空的唯一索引(Unique not null),如果有,则该列即为主键。

如果不符合上述条件,InnoDB存储引擎自动创建一个6字节大小的指针。

当表中有多个非空唯一索引时,InnoDB 存储引擎将选择建表时第一个定义的非空唯一索引为主键。这里需要注意的是,主键的选择根据的是定义索引的顺序,而不是建表时列的顺序。看下面的例子:

ad4d8fcc186effc36290f3e66723a614.png

上述示例创建了一张z表,有a、b、c、d四个列。b c  d三列上都有唯一索引,不同的是b类允许NULL值。由于没有显式地定义主键,因此会选择非空的唯一索引,可以通过下面的SQL语句判断表的主键值:

4b85e8fa90d97cf157feb596a27ad4d1.png

_rowid 可以显示表的主键,因此通过上述查询可以找到表z的主键。此外,虽然c、d列都是非空唯一索引,都可以作为主键的候选,但是在定义的过程中,由于d 列首先定义为唯一索引,故InnoDB存储引擎将其视为主键。

另外需要注意的是,_rowid只能 用于查看单个类为主键的情况,对于多列组成的主键就显得无能为力了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值