欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

mysql快速获得库中无主键的表实例代码

程序员文章站 2023-02-20 16:03:32
概述 总结一下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>';

mysql快速获得库中无主键的表实例代码

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');

mysql快速获得库中无主键的表实例代码

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;

mysql快速获得库中无主键的表实例代码

可以发现,上面的_rowid与id的值相同,因为id列是表中第一个唯一且not null的索引。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。