mysql 在一条语句中描述数据库中的所有表?

p1iqtdky  于 12个月前  发布在  Mysql
关注(0)|答案(8)|浏览(109)

有没有一个语句可以描述数据库中的所有表?
就像这样:

describe * from myDB;

字符串

a2mppw5e

a2mppw5e1#

没有一个语句可以一次describe所有表。下面是一些选项:

SELECT * FROM information_schema.columns WHERE table_schema = 'db_name';
SELECT * FROM information_schema.columns WHERE table_schema = 'db_name' ORDER BY TABLE_NAME, ORDINAL_POSITION;
SELECT TABLE_NAME, COLUMN_NAME, DATA_TYPE, COLUMN_TYPE, COLUMN_COMMENT, ORDINAL_POSITION FROM information_schema.columns WHERE table_schema = 'db_name' ORDER BY TABLE_NAME, ORDINAL_POSITION;
SELECT * FROM information_schema.columns WHERE table_schema != 'information_schema';

字符串

zfycwa2u

zfycwa2u2#

要显式指定每个表,请执行以下操作:

DESCRIBE table_a; DESCRIBE table_b; DESCRIBE table_c;

字符串

oyxsuwqo

oyxsuwqo3#

我使用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

字符串

tmb3ates

tmb3ates4#

这是@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;

字符串

6mzjoqzu

6mzjoqzu5#

请像下面这样创建bash脚本,它会提示您详细信息。

仅限Linux- BASH插件-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

字符串

用法- */bin/sh describe-all-tables.sh *

j7dteeu8

j7dteeu86#

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

字符串

sgtfey8w

sgtfey8w7#

不确定是否有一种方法可以像在mysql提示符下运行命令时那样以“table”格式显示结果,但这应该描述了所有垂直格式的表。

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

字符串

zfycwa2u

zfycwa2u8#

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

**连接数据库:**mysql [-u username] [-h hostname] database-name
**要列出所有数据库,请在MySQL提示符中键入:**show databases
**然后选择合适的数据库:**使用MyDB;
**列出数据库中的所有表:**显示表;
描述表:desc table-namedescribe table-name

相关问题