MySQL中的隐藏列
-
mysql中存在一些隐藏列,例如行标识、事务ID、回滚指针等,不知道大家是否和我一样好奇过,要怎样才能实际地看到这些隐藏列的值呢?
实际上,将行标识称为隐藏列并不准确,因为它并不是一个真实存在的列,DB_ROW_ID实际上是一个非空唯一列的别名。
首先我们需要了解,官方给出的定义是这样的:如果在表中存在主键或非空唯一索引,并且仅由一个整数类型的列构成,那么就可以使用SELECT语句直接查询_rowid,并且这个_rowid的值会引用该索引列的值。
可以发现,在文档中着重提到的几个关键字如:主键、唯一索引、非空、单独一列、数值类型,接下来我们就可以从这些角度入手,并且以神秘字段_rowid为例。
存在主键,在这种情况下查看执行结果,_rowid可以被正常查询,可以看到在设置了主键,并且主键字段是数值类型的情况下,_rowid直接引用了主键字段的值。对于这种可以被select语句查询到的的情况,可以将其称为显式的rowid。
无主键,存在唯一索引:在这种情况下查询可以正常执行,并且_rowid引用了唯一索引所在列的值。唯一索引与主键不同的是,唯一索引所在的字段可以为NULL。
存在联合主键或联合唯一索引。在这一情况中执行结果无法显示的查询到_rowid。
存在多个唯一索引。在mysql中,每张表只能存在一个主键,但是可以存在多个唯一索引。可以看到在这一情况下_rowid的值与no这一列的值相同,证明了_rowid会严格地选取第一个创建的唯一索引作为它的引用。
西南地区IT社群(QQ)
- 云南
- 【昆明网页设计交流吧】243627302
- 【昆明nodejs交流吧】 243626749
- 【VUE】838405306
- 【云南程序员总群】343606807
- 【昆明UI设计】104031254
- 【云南软件外包】15547313
- 贵州
- 【PHP/java源码/站长交流群】55692114
- 四川
- 【成都Java/JavaWeb交流】86669225
- 【vaScript+PHP+MySql】116270060
- 【UI设计/设计交流学习群】135794928
- 重庆
- 【诺基亚 JAVA游戏博物馆】 559479780
- 【PHP,Java,Python,C++接单】 442103442
- 西藏