如何通过一个语句描述数据库中的所有表?

时间:2013-11-16 16:20:30

标签: mysql

是否有可以描述数据库中所有表的语句?

这样的事情:

describe * from myDB;

8 个答案:

答案 0 :(得分:59)

没有声明同时describe所有表格。但你可能想做这样的事情:

SELECT * FROM information_schema.columns WHERE table_schema = 'db_name';

答案 1 :(得分:7)

因为其他建议在屏幕上造成了很多混乱,或者只是没有做到这里的技巧是一个小数据库的黑客攻击:

describe table_a; describe table_b; describe table_c; 

等等

答案 2 :(得分:6)

我正在使用linux方式。首先创建一个〜/ .my.cnf来存储mysql的用户名和密码。接下来使用下面的代码片段并在linux终端中运行它。

生成表格列表并过滤标题和awk以生成列。然后,使用与DESC table_name相同的方法。

for i in $(mysql MYDBNAME -e 'SHOW TABLES' | grep -v "Tables_in" | awk '{print $1}'); do echo "TABLE: $i"; mysql MYDBNAME -e "DESC $i"; done

希望这会有所帮助。

答案 3 :(得分:2)

mysql -B -N -u root -pPASSWORD -h somehost \
-e "SELECT DISTINCT CONCAT('describe ', table_name, ';') AS query FROM information_schema.tables WHERE table_schema='DATABASE_NAME_HERE' " | \
mysql -B -N -u root -pPASSWORD -h somehost DATABASE_NAME_HERE

答案 4 :(得分:2)

这是@ AlexShaffer的优秀评论的变体,经过修改,以反映Mac终端的mysql监视器在被要求描述表时输出的内容。

USE information_schema;

SELECT TABLE_NAME 'Table', COLUMN_NAME 'Field', COLUMN_TYPE 'Type', IS_NULLABLE 'Null',
  COLUMN_KEY 'Key', COLUMN_DEFAULT 'Default', EXTRA 'Extra'
FROM information_schema.columns
WHERE table_schema = 'your_db'
ORDER BY TABLE_NAME;

答案 5 :(得分:1)

请创建如下的bash脚本,它会提示您输入详细信息。

  

LINUX ONLY - BASH SCRIPT - describe-all-tables.sh

#!/bin/sh

echo ""
read -p 'MySQL db: ' DB
echo ""
read -p 'MySQL user: ' USER
echo ""
read -e -p 'MySQL host: ' -i "localhost" HOSTNAME
echo ""
read -s -p 'MySQL password: ' PASSWORD
echo ""

mysql -N -u${USER} ${DB} -p${PASSWORD} -h ${HOSTNAME} --execute="show tables" | while read table; do mysql -u${USER} -h ${HOSTNAME} ${DB} -p${PASSWORD} -v -t --execute="describe $table"; echo -e "\n"; done
  

USAGE - / bin / sh describe-all-tables.sh

答案 6 :(得分:0)

默认情况下,Mysql不描述数据库中的所有表。数据库主要意图的主要原因只是分散权力并处理元数据,而不是索引数据。

连接到数据库: mysql [-u username] [-h hostname] database-name

要列出所有数据库,请在MySQL提示符下键入: 显示数据库

然后选择正确的数据库: 使用MyDB;

列出数据库中的所有表格: show tables;

描述一个表格: desc table-name 描述表名

答案 7 :(得分:0)

不确定是否有办法让结果显示在"表格中#34;从mysql提示符运行命令时的格式,但这应该描述垂直格式化的所有表。

mysql -N -uUSER -pPASSWORD DATABASE_NAME --execute="show tables" | while read table; do mysql -uUSER -pPASSWORD DATABASE_NAME --execute="describe $table \G"; done