mysql如何快速获得库中无主键的表
这篇文章将为大家详细讲解有关mysql如何快速获得库中无主键的表,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
1、查看表主键信息
--查看表主键信息SELECTt.TABLE_NAME,t.CONSTRAINT_TYPE,c.COLUMN_NAME,c.ORDINAL_POSITIONFROMINFORMATION_SCHEMA.TABLE_CONSTRAINTSASt,INFORMATION_SCHEMA.KEY_COLUMN_USAGEAScWHEREt.TABLE_NAME=c.TABLE_NAMEANDt.CONSTRAINT_TYPE='PRIMARYKEY'ANDt.TABLE_NAME='<TABLE_NAME>'ANDt.TABLE_SCHEMA='<TABLE_SCHEMA>';
2、查看无主键表
--查看无主键表SELECTtable_schema,table_name,TABLE_ROWSFROMinformation_schema.tablesWHERE(table_schema,table_name)NOTIN(SELECTDISTINCTtable_schema,table_nameFROMinformation_schema.columnsWHERECOLUMN_KEY='PRI')ANDtable_schemaNOTIN('sys','mysql','information_schema','performance_schema');
3、无主键表
在Innodb存储引擎中,每张表都会有主键,数据按照主键顺序组织存放,该类表成为索引组织表 Index Ogranized Table
如果表定义时没有显示定义主键,则会按照以下方式选择或创建主键:
1) 先判断表中是否有"非空的唯一索引",如果有
如果仅有一条"非空唯一索引",则该索引为主键
如果有多条"非空唯一索引",根据索引索引的先后顺序,选择第一个定义的非空唯一索引为主键。
2) 如果表中无"非空唯一索引",则自动创建一个6字节大小的指针作为主键。
如果主键索引只有一个索引键,那么可以使用_rowid来显示主键,实验测试如下:
--删除测试表DROPTABLEIFEXISTSt1;--创建测试表CREATETABLE`t1`(`id`int(11)NOTNULL,`c1`int(11)DEFAULTNULL,UNIQUEuni_id(id),INDEXidx_c1(c1))ENGINE=InnoDBCHARSET=utf8;--插入测试数据INSERTINTOt1(id,c1)SELECT1,1;INSERTINTOt1(id,c1)SELECT2,2;INSERTINTOt1(id,c1)SELECT4,4;--查看数据和_rowidSELECT*,_rowidFROMt1;
可以发现,上面的_rowid与id的值相同,因为id列是表中第一个唯一且NOT NULL的索引。
关于“mysql如何快速获得库中无主键的表”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。