2011-12-07 13 views
9

Básicamente quiero obtener los nombres de tabla y los nombres de los campos de cada tabla de la base de datos actual que está conectado, nada más.Obtener el esquema de la base de datos con una consulta?

¿Esto es posible?

sé que SHOW TABLES FROM my_database te lleva los nombres de tabla y SHOW COLUMNS FROM my_table le conseguirá los campos, pero eso es al menos [1 x # de tablas] consultas y me da más información que yo quiero :)

+0

¿Tiene que ser en PHP o se puede utilizar [volcado mysql] (http://www.howtogeek.com/howto/programming/mysql/dump-just-the-table-structure-to- a-file-in-mysql /)? –

+0

dentro de php (estoy usando DOP hacer consultas) – Alex

Respuesta

15

La tabla INFORMATION_SCHEMA.COLUMNS tiene lo que estás pidiendo.

SELECT table_name, column_name 
    FROM INFORMATION_SCHEMA.COLUMNS 
    WHERE table_schema = 'YourDBName' 
    ORDER BY table_name, ordinal_position 
+0

consigo información de todas las bases de datos – Alex

+0

@Alex: He añadido una cláusula where para usted. –

+0

gracias, funciona perfectamente :) – Alex

4
SELECT * 
FROM information_schema.tables t 
JOIN information_schema.columns c ON t.TABLE_NAME = c.TABLE_NAME 
AND t.TABLE_CATALOG=c.TABLE_CATALOG 
AND t.TABLE_SCHEMA=c.TABLE_SCHEMA 

funciona para SQLSERVER 2005. Los nombres de las columnas pueden ser diferentes para MySQL (supongo que eso es lo que está usando), pero el concepto es el mismo.

+0

SQL Server y MySQL tanto la estructura INFORMATION_SCHEMA uso que sea razonablemente similares a SQL estándar, pero Fwiw MySQL no soporta catálogos, por lo table_catalog es siempre la cadena literal ' 'def' '. –

1

"Mostrar bases de datos", "Mostrar tablas" y "describir tabla" son la mejor y más rápida forma que conozco en MySql.

Pero ellos son MySql-specific.

Si quieren:

a) una manera portátil para consultar el esquema de base de datos

... AND ... 

b) un control más granular sobre la consulta, y luego mirar INFORMATION_SCHEMA:

http://dev.mysql.com/doc/refman/5.0/en/information-schema.html

SINTAXIS:

SELECT table_name FROM INFORMATION_SCHEMA.TABLES 
    WHERE table_schema = 'db_name' 
    [AND table_name LIKE 'wild'] 
4
SELECT t.name AS tblName, 
SCHEMA_NAME(schema_id) AS [schemaName], 
c.name AS colName 
FROM sys.tables AS t 
INNER JOIN sys.columns c ON t.OBJECT_ID = c.OBJECT_ID 
ORDER BY tblName; 
0

Después de algunas pruebas, hice este código sql para ver las columnas en mi tabla.

SELECT 
TABLE_NAME as table_name, 
COLUMN_NAME as column_name, 
COLUMN_TYPE as data_type, 
COLUMN_DEFAULT as default_value, 
IS_NULLABLE as nullable, 
COLUMN_KEY as constraints, 
EXTRA as constraints2, 
CHARACTER_SET_NAME as charset, 
COLLATION_NAME as collation 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE table_schema = '<YOUR_DATABASE_NAME>' 
AND TABLE_NAME='<YOUR_TABLE_NAME>' 
ORDER BY table_name, ordinal_position 
Cuestiones relacionadas