2011-12-07 3 views
9

Zasadniczo chcę uzyskać nazwy tabel i nazwy pól dla każdej tabeli z bieżącej bazy danych, która jest połączona, nic więcej.Uzyskaj schemat bazy danych za pomocą jednego zapytania?

Czy to możliwe?

wiem, że SHOW TABLES FROM my_database dostaje nazwy tabel i SHOW COLUMNS FROM my_table będzie Ci pola, ale to przynajmniej [1 x # stołów] zapytań i uzyskać więcej informacji, które chcę :)

+0

Czy trzeba być w PHP lub użyć [mysql zrzutu] (http://www.howtogeek.com/howto/programming/mysql/dump-just-the-table-structure-to- a-file-in-mysql /)? –

+0

w php (używam PDO do wykonywania zapytań) – Alex

Odpowiedz

15

Tabela INFORMATION_SCHEMA.COLUMNS zawiera to, o co prosisz.

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

Otrzymuję informacje ze wszystkich baz danych – Alex

+0

@Alex: Dodałem do ciebie klauzulę where. –

+0

dziękuję, działa idealnie :) – 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 

działa dla SQLSERVER 2005. Nazwy kolumn mogą być inne dla MySQL (zakładam, że tego właśnie używasz), ale koncepcja jest taka sama.

+0

SQL Server i MySQL używają struktury information_schema, która jest rozsądnie podobna do standardowego SQL, ale FWIW MySQL nie obsługuje katalogów, więc table_catalog jest zawsze literalnym łańcuchem ''def' '. –

1

"Pokaż bazy danych", "Pokaż tabele" i "opisz tabelę" to najlepszy, najszybszy sposób, jaki znam w MySql.

Ale one specyficzne dla MySql.

Jeśli chcesz:

a) przenośny sposób do kwerendy schematu bazy danych

... AND ... 

b) bardziej precyzyjną kontrolę nad swoim zapytaniu, a następnie spojrzeć na INFORMATION_SCHEMA:

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

SKŁADNIA:

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

Po kilku próbach, zrobiłem ten kod SQL, aby zobaczyć kolumny w mojej tabeli.

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