Получить схему базы данных одним запросом? - PullRequest
9 голосов
/ 07 декабря 2011

В основном я хочу получить имена таблиц и имена полей для каждой таблицы из текущей подключенной базы данных, ничего больше.

Возможно ли это?

Я знаю, что SHOW TABLES FROM my_database даст вам имена таблиц, а SHOW COLUMNS FROM my_table даст вам поля, но это как минимум [1 x # таблиц] запросов, и я получу больше информации, которую я хочу:)

Ответы [ 5 ]

16 голосов
/ 07 декабря 2011

В таблице INFORMATION_SCHEMA.COLUMNS есть то, что вы просите.

SELECT table_name, column_name
    FROM INFORMATION_SCHEMA.COLUMNS
    WHERE table_schema = 'YourDBName'
    ORDER BY table_name, ordinal_position
4 голосов
/ 07 декабря 2011
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;
4 голосов
/ 07 декабря 2011
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 могут отличаться (я полагаю, это то, что вы используете), но концепция та же.

1 голос
/ 07 декабря 2011

«Показать базы данных», «Показать таблицы» и «описать таблицу» - лучший и самый быстрый способ, который я знаю в MySql.

Но они MySql-специфические.

Если вы хотите:

a) портативный способ запроса схемы базы данных

 ... AND ...

b) более детальный контроль над вашим запросом, тогда посмотрите на INFORMATION_SCHEMA:

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']
0 голосов
/ 28 марта 2015

После нескольких испытаний я сделал этот 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...