如何通过查询获取MySQL中的数据库结构


171

是否有可能以某种方式获取MySQL数据库的结构,或者只是一些具有简单查询的表?

还是有另一种方法,我该怎么办?

Answers:


260

我认为你所追求的是 DESCRIBE

DESCRIBE table;

您也可以使用 SHOW TABLES

SHOW TABLES;

获取数据库中表的列表。


6
要针对特定​​的数据库使用: SHOW TABLES FROM database_name
Tarik

109

要将整个数据库结构作为一组CREATE TABLE语句获取,请使用mysqldump

mysqldump database_name --compact --no-data

对于单个表,在mysqldump中的表名之后添加表名。使用SQL和SHOW CREATE TABLE可以获得相同的结果:

SHOW CREATE TABLE table;

DESCRIBE(如果您希望使用列列表):

DESCRIBE table;

3
show create table正是我想要的。谢谢!
Shai

这不是解决方案,但我非常感激,因为我不知道此功能是否存在并且很棒!
阿里·威斯伯格

41

看一下INFORMATION_SCHEMATABLES表。它包含有关所有表的元数据。

例:

SELECT * FROM `INFORMATION_SCHEMA`.`TABLES`
WHERE TABLE_NAME LIKE 'table1'

与其他方法相比,此方法的优势在于您可以轻松地将上述查询作为其他查询中的子查询使用。


6
是不是应该这样information_schemacolumns(使用columnstable而不是tables?因为tables不包含有关表列类型的任何信息
Dimitry K 2014年

第二个优势是服务器启动时将信息模式加载到内存中,因此无需读取硬盘
bortunac 2015年

是的,绝对应该是COLUMS而不是TABLES!那很有效!
拉塞尔富尔顿

32

使用这个:

SHOW CREATE TABLE `users`;

将为您提供该表的DDL

DESCRIBE `users`

将列出该表中的列


1
soulmerge,确保它是该表的DDL语句
duckyflip

是的,它是DDL中的一条语句,但是C函数本身并不是C。C是一种语言,C程序中的函数是该语言中的构造。
soulmerge

18
@soulmerge,我也是学徒,但我认为您在这里是错的:“法语为“谢谢”为“ merci””是可以接受的英语句子(不少于“法语为”等) ,并将其概括为“ {{要表达的}}的{{语言名称}}”,例如“此表的DDL”。“ AC功能本身不是C”与说“法语单词本身不是法语”是一样的:嗯,这当然不是全部法语,但是说“'Au revoir'是法语”几乎是令人反感的(显然这意味着它是法语的一部分,而不是法语的全部!-)。
亚历克斯·马丁里

@soulmerge。是的,绝对是拒绝投票的理由...享受!
mate00

dafuqq正在进行这里
Niton

19
SELECT *
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_SCHEMA = 'test' AND TABLE_NAME ='products'; 

Table_schema数据库名称在哪里


有没有一种方法来选择信息模式。列-来自特定数据库的表?
2015年

我在末端使用了此查询SELECT TABLE_NAME, COLUMN_NAME, DATA_TYPE, IS_NULLABLE, COLUMN_COMMENT FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'my_db_name' AND TABLE_NAME ='users';
Ahmed Numaan


8

我发现有用的第一个答案的变体

打开命令提示符并输入(您不必登录到mysql服务器)

mysqldump -hlocalhost -u<root> -p<password>  <dbname>  --compact --no-data > </path_to_mydump/>mysql.dmp

我喜欢这样,它给出了create语句。
Thufir 2014年

2

在以下示例中,

playground是数据库名称和equipment表名称

另一种方法是使用SHOW-COLUMNS:5.5(也可用于5.5>

$ mysql -uroot -p<password> -h<host> -P<port> -e \
    "SHOW COLUMNS FROM playground.equipment"

并输出:

mysql: [Warning] Using a password on the command line interface can be insecure.
+-------+-------------+------+-----+---------+----------------+
| Field | Type        | Null | Key | Default | Extra          |
+-------+-------------+------+-----+---------+----------------+
| id    | int(11)     | NO   | PRI | NULL    | auto_increment |
| type  | varchar(50) | YES  |     | NULL    |                |
| quant | int(11)     | YES  |     | NULL    |                |
| color | varchar(25) | YES  |     | NULL    |                |
+-------+-------------+------+-----+---------+----------------+

也可以使用mysqlshow-client(也可用于5.5>),如下所示:

$ mysqlshow -uroot -p<password> -h<host> -P<port> \
    playground equipment

并输出:

mysqlshow: [Warning] Using a password on the command line interface can be insecure.
Database: playground  Table: equipment
+-------+-------------+-------------------+------+-----+---------+----------------+---------------------------------+---------+
| Field | Type        | Collation         | Null | Key | Default | Extra          | Privileges                      | Comment |
+-------+-------------+-------------------+------+-----+---------+----------------+---------------------------------+---------+
| id    | int(11)     |                   | NO   | PRI |         | auto_increment | select,insert,update,references |         |
| type  | varchar(50) | latin1_swedish_ci | YES  |     |         |                | select,insert,update,references |         |
| quant | int(11)     |                   | YES  |     |         |                | select,insert,update,references |         |
| color | varchar(25) | latin1_swedish_ci | YES  |     |         |                | select,insert,update,references |         |
+-------+-------------+-------------------+------+-----+---------+----------------+---------------------------------+---------+


0

如今,人们使用DESC代替DESCRIPTION。例如:- DESC users;

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.