![](/img/trans.png)
[英]How can I delete all the triggers in a MySQL database using one SQL statement?
[英]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-name或describe 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.