para - mostrar campos de una tabla mysql
¿Cómo puedo describir todas las tablas en la base de datos a través de una declaración? (8)
Cree el script de bash como se muestra a continuación y le pedirá detalles.
SÓLO LINUX - SCRIPT DE 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
USO - / bin / sh describe-all-tables.sh
¿Hay una declaración que pueda describir todas las tablas en una base de datos?
Algo como esto:
describe * from myDB;
Esta es una variación del excelente comentario de @ AlexShaffer, modificado para reflejar las salidas del monitor mysql del terminal Mac cuando se le pide que describa una tabla.
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;
Estoy usando Linux. Primero cree un ~ / .my.cnf para almacenar el nombre de usuario y la contraseña de mysql. A continuación, utilice el fragmento de código siguiente y ejecútelo en el terminal de Linux.
Genere la lista de tablas y filtre el encabezado y awk para generar la columna. Luego, use el mismo método para 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
Espero que esto ayude.
No estoy seguro si hay una manera de hacer que los resultados se muestren en un formato de "tabla", como ocurre cuando se ejecuta el comando desde el indicador de mysql, pero esto debería describir todas las tablas con formato vertical.
mysql -N -uUSER -pPASSWORD DATABASE_NAME --execute="show tables" | while read table; do mysql -uUSER -pPASSWORD DATABASE_NAME --execute="describe $table /G"; done
No hay ninguna declaración que describe
todas las tablas a la vez. Pero es posible que desee hacer algo como esto:
SELECT * FROM information_schema.columns WHERE table_schema = ''db_name'';
Por defecto, Mysql no describe todas las tablas en la base de datos. La razón principal Base de datos intención principal Simplemente descentralizar el poder y cuidar de los metadatos, pero no indexar los datos.
Conéctese a la base de datos: mysql [-u nombre de usuario] [-h nombre de host] nombre-base de datos
Para listar todas las bases de datos, en el indicador de MySQL escriba: muestre bases de datos
Luego elija la base de datos correcta: use MyDB;
Listar todas las tablas en la base de datos: mostrar tablas;
Describe una tabla: nombre de tabla desc o describe nombre de tabla
porque las otras sugerencias hicieron mucho lío en la pantalla o simplemente no hicieron el truco aquí es un truco para una pequeña db:
describe table_a; describe table_b; describe table_c;
y así
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