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

Mysql

Mysql Problem Overview


Is there any statement that can describe all tables in a database?

Something like this:

describe * from myDB;

Mysql Solutions


Solution 1 - Mysql

There is no statement that describe all tables at once. But you may want to do something like this :

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

Solution 2 - Mysql

because the other suggestions made very much mess on the screen or just did not do the trick here is a hack for a small db:

describe table_a; describe table_b; describe table_c; 

and so on

Solution 3 - Mysql

I am using linux way. First create a ~/.my.cnf to store the username and password for mysql. Next use the snippet below and run it in the linux terminal.

Generate the tables list and filter the header and awk to generate the column. Then, use the same method to 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

Hope this helps.

Solution 4 - Mysql

This is a variation of @AlexShaffer's excellent comment, modified to mirror what the Mac terminal's mysql monitor outputs when asked to describe a table.

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;

Solution 5 - Mysql

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

Solution 6 - Mysql

Please create the bash script like below and it will prompt you for details.

> 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

Solution 7 - Mysql

By default, Mysql not describe all tables in the database. The main reason Database main intention Just decentralize power and take care of metadata, but not index the data.

Connect to the database: mysql [-u username] [-h hostname] database-name

To list all databases, in the MySQL prompt type: show databases

Then choose the right database: use MyDB;

List all tables in the database: show tables;

Describe a table: desc table-name or describe table-name

Solution 8 - Mysql

Not sure if there is a way to get the results to display in a "table" format as it does when running the command from the mysql prompt, but this should describe all tables formatted vertically.

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

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionSajadView Question on Stackoverflow
Solution 1 - MysqlHamed KamravaView Answer on Stackoverflow
Solution 2 - MysqlsiviView Answer on Stackoverflow
Solution 3 - MysqlEnglebert Lai Pak FuView Answer on Stackoverflow
Solution 4 - MysqlquantumferretView Answer on Stackoverflow
Solution 5 - MysqlFredrik NymanView Answer on Stackoverflow
Solution 6 - MysqlKamal SoniView Answer on Stackoverflow
Solution 7 - MysqlVenu A PositiveView Answer on Stackoverflow
Solution 8 - MysqlscottalanView Answer on Stackoverflow