2011-12-07 3 views
9

기본적으로 테이블 이름과 연결되어있는 현재 데이터베이스의 각 테이블에 대한 필드 이름을 가져 오려고합니다.하나의 쿼리로 데이터베이스 스키마를 가져 옵니까?

이것이 가능합니까?

나는 SHOW TABLES FROM my_database 당신에게 테이블 이름을 얻을 수 있음을 알고, SHOW COLUMNS FROM my_table 당신에게 필드를 얻을 것이다, 그러나 그것은 쿼리 적어도 [테이블 1 개 #] 그리고 나는 :) 원하는

+0

그것은 PHP에있을 필요가 있는가하거나 [mysql을 덤프 (http://www.howtogeek.com/howto/programming/mysql/dump-just-the-table-structure-to-을 사용할 수 있습니다 a-file-in-mysql /)? –

+0

php (나는 PDO를 사용하여 쿼리를 수행합니다.) – Alex

답변

15

INFORMATION_SCHEMA.COLUMNS 테이블에 귀하가 원하는 것이 있습니다.

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

모든 데이터베이스에서 정보를 얻습니다. – Alex

+0

@Alex : where 절을 추가했습니다. –

+0

완벽하게 작동합니다. – 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 
것을 더 많은 정보를 얻을

은 SQLSERVER 2005에서 작동합니다. MySQL의 경우 열 이름이 다를 수 있지만 (사용중인 것으로 가정) 개념은 동일합니다.

+0

SQL Server와 MySQL은 모두 표준 SQL과 상당히 유사한 information_schema 구조를 사용하지만 FWIW MySQL은 카탈로그를 지원하지 않으므로 table_catalog는 항상 'def'라는 리터럴 문자열입니다. '. –

1

"Show tables", "Show tables"및 "describe table"은 MySql에서 가장 잘 알고있는 가장 빠른 방법입니다.

하지만 입니다. MySql에만 해당됩니다.

은 당신이 원하는 경우

A) INFORMATION_SCHEMA 보면 다음 쿼리를 통해) 더 세밀하게 제어 데이터베이스 스키마

... AND ... 

B를 조회 할 수있는 휴대용 방법 :

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

구문 :

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

몇 가지 시도 후에이 SQL 코드를 사용하여 테이블의 열을 확인했습니다.

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 
관련 문제