-
首先判断表中是否有非空的唯一索引,即unique key not null,如果有,那么该列就会变为主键(rowid)
-
如果有多个非空的唯一索引,则会选择建表时第一个定义的非空唯一索引作为主键(rowid)
-
如果不符合上述条件,InnoDB存储引擎将自动创建一个6字节大小的指针(rowid)
举个栗子
CREATE TABLE z(
a INT NOT NULL,
b INT NULL,
c INT NOT NULL,
d INT NOT NULL,
UNIQUE KEY(b),
UNIQUE KEY©,
UNIQUE KEY(d)
)ENGINE=INNODB,CHARSET=utf8;
从建表上看,可以看到b、c、d列都有唯一索引,但b可以为NUll,故不可以充当主键,而第一个非空唯一索引是c列,所以c将会充当主键。
//插入几条数据
INSERT INTO z SELECT 1,2,3,4;
INSERT INTO z SELECT 1,3,4,5;
INSERT INTO z SELECT 1,4,5,6;
INSERT INTO z SELECT 1,5,6,7;
//查询情况,_rowid可以判断主键是哪一列
SELECT a,b,c,d,_rowid FROM z;
结果如下所示