mysql查看表结构及已有索引信息

本文提供了一组详尽的SQL语句用于查询MySQL和Oracle数据库中的表结构、索引信息及表注释等内容。通过这些SQL语句,可以方便地获取数据库表的各项详细信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

需求背景是给一个表名然后给出相应的表结构信息及索引信息

常用的命令有如下:

desc tableName; desc employees.employees;

show columns from tableName; show COLUMNS from employees.employees;

describe tableName; DESCRIBE employees.employees;

这三个显示的结果都是一样的,显示表中filed,type,null,key,default及extra。

show create table tableName; show CREATE TABLE employees.employees;

这个语句会显示这个表的建表语句。

select * from columns where table_name='表名';select * from information_schema.COLUMNS where TABLE_SCHEMA='employees' and TABLE_NAME='employees';

这个显示的结果就比较全了。

接下来,来点更全的sql,这个是用来同步mysql和orac数据字典的所有sql。

mysql部分:

## 查看所有的库
SELECT
	lower(schema_name) schema_name
FROM
	information_schema.schemata
WHERE
	schema_name NOT IN (
		'mysql',
		'information_schema',
		'test',
		'search',
		'tbsearch',
		'sbtest',
		'dev_ddl'
	)

## 产看某一个库中的所有表
SELECT
	table_name,
	create_time updated_at,
	table_type,
	ENGINE,
	table_rows num_rows,
	table_comment,
	ceil(data_length / 1024 / 1024) store_capacity
FROM
	information_schema.TABLES
WHERE
	table_schema = 'employees'
AND table_name NOT LIKE 'tmp#_%' ESCAPE '#'

##查看某一个库下某一个表的所有字段
SELECT
	lower(column_name) column_name,
	ordinal_position position,
	column_default dafault_value,
	substring(is_nullable, 1, 1) nullable,
	column_type data_type,
	column_comment,
	character_maximum_length data_length,
	numeric_precision data_precision,
	numeric_scale data_scale
FROM
	information_schema.COLUMNS
WHERE
	table_schema = 'employees'
AND table_name = 'employees';


## 查看某一个库下某一张表的索引

SELECT DISTINCT
	lower(index_name) index_name,
	lower(index_type) type
FROM
	information_schema.statistics
WHERE
	table_schema = 'employees'
AND table_name = 'employees';

## 查看某一个库下某一张表的某一个索引

SELECT
	lower(column_name) column_name,
	seq_in_index column_position
FROM
	information_schema.statistics
WHERE
	table_schema = 'employees'
AND table_name = 'employees'
AND index_name = 'primary';

## 查看某一个库下某一个表的注释
SELECT
	table_comment comments
FROM
	information_schema.TABLES
WHERE
	table_schema = 'employees'
AND table_name = 'employees';

## 查看某一个库下某一个表的列的注释
SELECT
	lower(column_name) column_name,
	column_comment comments
FROM
	COLUMNS
WHERE
	table_schema = 'employees'
AND table_name = 'employees';

oracle部分:

#table structure:
SELECT
	lower(table_name) table_name,
	TEMPORARY,
	tablespace_name,
	num_rows,
	duration,
	'ORACLE' table_type,
	partitioned,
	(
		SELECT
			ceil(sum(bytes) / 1024 / 1024)
		FROM
			dba_segments b
		WHERE
			a. OWNER = b. OWNER
		AND a.table_name = b.segment_name
	) AS store_capacity
FROM
	dba_tables a
WHERE
	OWNER = ?
AND table_name NOT LIKE 'TMP%';

SELECT
	lower(column_name) column_name,
	column_id position,
	data_type,
	data_length,
	data_precision,
	data_scale,
	nullable,
	data_default default_value,
	default_length
FROM
	dba_tab_columns
WHERE
	OWNER = ?
AND table_name = ?;

# index
SELECT
	lower(index_name) index_name,
	index_type type
FROM
	dba_indexes
WHERE
	OWNER = ?
AND table_name = ?
AND index_name NOT LIKE 'SYS_IL%';

SELECT
	lower(column_name) column_name,
	column_position,
	descend
FROM
	dba_ind_columns
WHERE
	table_owner = ?
AND table_name = ?
AND index_name = ?;

#collect description
SELECT
	comments
FROM
	dba_tab_comments
WHERE
	OWNER = ?
AND table_name = ?;

SELECT
	lower(column_name) column_name,
	comments
FROM
	dba_col_comments
WHERE
	OWNER = ?
AND table_name = ?;

#database
SELECT
	lower(username) username
FROM
	dba_users
WHERE
	username NOT IN (
		'STDBYPERF',
		'READONLY',
		'APPQOSSYS',
		'ANYSQL',
		'DBFLASH',
		'SYS',
		'SYSTEM',
		'MONITOR',
		'TBSEARCH',
		'MANAGER',
		'SYSMAN',
		'EXFSYS',
		'WMSYS',
		'DIP',
		'TSMSYS',
		'ORACLE_OCM',
		'OUTLN',
		'DBSNMP',
		'PERFSTAT',
		'SEARCH',
		'TOOLS',
		'TBDUMP',
		'DMSYS',
		'XDB',
		'ANONYMOUS',
		'DEV_DDL'
	);

#segsize
SELECT
	round(sum(bytes) / 1024 / 1024, 0) mbytes
FROM
	dba_segments
WHERE
	OWNER = ?
AND segment_name = ?;

关于oralce中的segements,可以参考一下这个系列文章。

http://book.51cto.com/art/201108/288137.htm


总结一下,mysql中查看库表字段信息都在information_schemal中,这些是获取数据字典的必备sql。本文中mysql的语句都在本地测试过。另外oracle的结构也要熟悉。

转载于:https://my.oschina.net/zimingforever/blog/64145

<think>好的,用户现在的问题是询问如何在MySQL查看表结构索引的命令。我需要根据已有的知识提供的引用内容来回答这个问题。首先,用户提到他们之前的问题是关于查看索引的命令,比如show命令,这可能涉及到SHOW INDEX或者SHOW CREATE TABLE这样的语句。现在他们想同时查看表结构索引,所以需要综合这两部分的信息。 首先,我应该回顾一下MySQL中常用的查看表结构的命令。记得DESCRIBEEXPLAIN可以用来查看表结构,但可能不够详细。而SHOW CREATE TABLE则会显示更全面的信息,包括表的创建语句,里面会包含索引信息。比如,用户提供的引用[1]中提到,删除PRIMARY KEY索引时不需要指定名字,因为一个表只能有一个主键,这可能查看索引的方式相关。 接下来,关于查看索引的具体命令,SHOW INDEX FROM table_name应该是直接显示索引的详细信息,比如索引名称、类型、包含的列等。引用[1]中提到的show命令可能就是SHOW INDEX,这里需要确认正确的语法。此外,引用[2]中提到了自然连接的例子,虽然索引无关,但用户之前的问题可能涉及SELECT查询,不过现在的问题更关注于查看结构。 用户可能需要的是几个不同的方法,以便选择最适合他们的。比如,DESCRIBE命令简单快速,但信息有限;SHOW CREATE TABLE则更详细,包括索引;而SHOW INDEX专门用于索引的详细信息。因此,回答应该涵盖这三种方法,并解释各自的优缺点。 另外,需要注意用户是否使用特定的MySQL版本,不同版本可能在输出格式上有细微差别,但基本命令应该是相同的。还要考虑用户是否有权限访问这些命令,但权限问题可能不在当前问题范围内。 最后,根据用户的要求,生成相关问题,可能涉及如何分析索引性能、优化索引或者如何创建索引等。这些问题应该当前主题相关,帮助用户进一步学习。</think>在MySQL查看表结构索引的常用命令及方法如下: ### 一、查看表结构 1. **DESCRIBE命令** 使用简写形式查看字段基本信息: ```sql DESC 表名; ``` 示例输出: ``` +-------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+--------------+------+-----+---------+-------+ ``` 2. **SHOW CREATE TABLE命令** 查看完整的表定义(包含索引): ```sql SHOW CREATE TABLE 表名\G ``` 输出包含建表语句、存储引擎、字符集及所有索引定义[^1]。 --- ### 二、查看索引信息 1. **SHOW INDEX命令** 查看索引详细信息: ```sql SHOW INDEX FROM 表名; ``` 输出字段说明: - `Key_name`:索引名称 - `Column_name`:索引列 - `Index_type`:索引类型(BTREE/FULLTEXT等) - `Non_unique`:是否唯一索引(0=唯一) 2. **通过INFORMATION_SCHEMA系统表查询** 高级查询方式: ```sql SELECT * FROM INFORMATION_SCHEMA.STATISTICS WHERE TABLE_SCHEMA='数据库名' AND TABLE_NAME='表名'; ``` --- ### 三、对比说明 | 命令 | 优势 | 局限性 | |-------------------------|-----------------------------|--------------------------| | `DESC 表名` | 快速查看字段基本信息 | 不显示索引详情 | | `SHOW CREATE TABLE` | 完整表结构包含所有索引定义[^1] | 输出格式较复杂 | | `SHOW INDEX` | 显示索引类型、列顺序等详细信息 | 需要单独执行 |
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值