mysql快速获得库中无主键的表实例代码
程序员文章站
2023-12-25 09:14:57
概述
总结一下mysql数据库查看无主键表的一些sql,一起来看看吧~
1、查看表主键信息
--查看表主键信息
select
t.table_name,...
概述
总结一下mysql数据库查看无主键表的一些sql,一起来看看吧~
1、查看表主键信息
--查看表主键信息 select t.table_name, t.constraint_type, c.column_name, c.ordinal_position from information_schema.table_constraints as t, information_schema.key_column_usage as c where t.table_name = c.table_name and t.constraint_type = 'primary key' and t.table_name = '<table_name>' and t.table_schema = '<table_schema>';
2、查看无主键表
--查看无主键表 select table_schema, table_name,table_rows from information_schema.tables where (table_schema, table_name) not in ( select distinct table_schema, table_name from information_schema.columns where column_key = 'pri' ) and table_schema not in ('sys', 'mysql', 'information_schema', 'performance_schema');
3、无主键表
在innodb存储引擎中,每张表都会有主键,数据按照主键顺序组织存放,该类表成为索引组织表 index ogranized table
如果表定义时没有显示定义主键,则会按照以下方式选择或创建主键:
1) 先判断表中是否有"非空的唯一索引",如果有
如果仅有一条"非空唯一索引",则该索引为主键
如果有多条"非空唯一索引",根据索引索引的先后顺序,选择第一个定义的非空唯一索引为主键。
2) 如果表中无"非空唯一索引",则自动创建一个6字节大小的指针作为主键。
如果主键索引只有一个索引键,那么可以使用_rowid来显示主键,实验测试如下:
--删除测试表 drop table if exists t1; --创建测试表 create table `t1` ( `id` int(11) not null, `c1` int(11) default null, unique uni_id (id), index idx_c1(c1) ) engine = innodb charset = utf8; --插入测试数据 insert into t1 (id, c1) select 1, 1; insert into t1 (id, c1) select 2, 2; insert into t1 (id, c1) select 4, 4; --查看数据和_rowid select *, _rowid from t1;
可以发现,上面的_rowid与id的值相同,因为id列是表中第一个唯一且not null的索引。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。