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

前端 未结 8 1947
天命终不由人
天命终不由人 2021-01-31 08:01

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

Something like this:

describe * from myDB;
相关标签:
8条回答
  • 2021-01-31 08:20
    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
    
    0 讨论(0)
  • 2021-01-31 08:22

    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;
    
    0 讨论(0)
  • 2021-01-31 08:32

    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
    
    0 讨论(0)
  • 2021-01-31 08:34

    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

    0 讨论(0)
  • 2021-01-31 08:38

    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.

    0 讨论(0)
  • 2021-01-31 08:41

    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';
    
    0 讨论(0)
提交回复
热议问题