簡體   English   中英

如何通過一條語句描述數據庫中的所有表?

[英]How can I describe all tables in the database through one statement?

有沒有可以描述數據庫中所有表的語句?

像這樣的東西:

describe * from myDB;

沒有一次describe所有表的語句。 但你可能想做這樣的事情:

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

因為其他建議在屏幕上弄得非常混亂,或者只是沒有做到這一點,這是一個小數據庫的黑客:

describe table_a; describe table_b; describe table_c; 

等等

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

希望這會有所幫助。

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

請創建如下所示的 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

默認情況下,Mysql 不會描述數據庫中的所有表。 主要原因 數據庫主要意圖 只是分散權力並處理元數據,而不是索引數據。

連接數據庫: mysql [-u username] [-h hostname] database-name

要列出所有數據庫,請在 MySQL 提示中鍵入: show databases

然后選擇合適的數據庫:使用MyDB;

列出數據庫中的所有表: show tables;

描述表: desc table-namedescribe table-name

不確定是否有辦法讓結果以“表格”格式顯示,就像從 mysql 提示符運行命令一樣,但這應該描述所有垂直格式化的表格。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM