2011-12-07 11 views
9

Fondamentalmente voglio ottenere i nomi delle tabelle e i nomi dei campi per ogni tabella dal database corrente connesso, nient'altro.Ottieni lo schema del database con una query?

È possibile?

So che SHOW TABLES FROM my_database si ottiene i nomi di tabella, e SHOW COLUMNS FROM my_table ti porterà i campi, ma è almeno [1 x # di tabelle] domande e ottengo ulteriori informazioni che voglio :)

+0

Ha bisogno di essere in PHP o si può usare [discarica mysql] (http://www.howtogeek.com/howto/programming/mysql/dump-just-the-table-structure-to- un-file-in-mysql /)? –

+0

all'interno di php (sto usando PDO per fare interrogazioni) – Alex

risposta

15

Il tavolo INFORMATION_SCHEMA.COLUMNS ha ciò che stai chiedendo.

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

Ottengo informazioni da tutti i database – Alex

+0

@Alex: ho aggiunto una clausola where per voi. –

+0

grazie, funziona perfettamente :) – 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 

funziona per SQLSERVER 2005. I nomi delle colonne potrebbero essere diversi per MySQL (presumo sia quello che stai usando), ma il concetto è lo stesso.

+0

SQL Server e MySQL usano entrambi la struttura information_schema che è ragionevolmente simile allo standard SQL, ma FWIW MySQL non supporta i cataloghi, quindi table_catalog è sempre la stringa letterale ''def' '. –

1

"Mostra banche dati", "Mostra tavoli" e "tabella descrivono" sono i migliori, modo più veloce che conosco in MySql.

Ma essi sono specifici per MySql.

Se si desidera:

a) un modo portatile per interrogare lo schema del database

... AND ... 

b) un controllo più granulare sulla tua ricerca, poi guardare INFORMATION_SCHEMA:

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

SINTASSI:

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

Dopo alcune prove, ho creato questo codice SQL per vedere le colonne nel mio tavolo.

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 
Problemi correlati