Как получить структуру базы данных в MySQL через запрос

171

Можно ли как-то получить структуру базы данных MySQL или просто таблицу с простым запросом?

Или есть другой способ, как я могу это сделать?

Якуб Арнольд
источник

Ответы:

261

Я думаю, что вы ищете DESCRIBE

DESCRIBE table;

Вы также можете использовать SHOW TABLES

SHOW TABLES;

чтобы получить список таблиц в вашей базе данных.

Билл Ящерица
источник
6
Для целевой базы данных используйте: SHOW TABLES FROM database_name
Tarik
109

Чтобы получить всю структуру базы данных в виде набора операторов CREATE TABLE , используйте mysqldump :

mysqldump database_name --compact --no-data

Для отдельных таблиц добавьте имя таблицы после имени базы данных в mysqldump. Вы получаете те же результаты с SQL и SHOW CREATE TABLE :

SHOW CREATE TABLE table;

Или опишите, если вы предпочитаете список столбцов:

DESCRIBE table;
Эемели Кантола
источник
3
show create tableбыло именно то, что я искал. Спасибо!
Шай
это не решение, но я благодарен, потому что я не знал, что эта функция существует и великолепна!
Ари Вайсберг
41

Посмотрите на INFORMATION_SCHEMA. TABLESстол. Он содержит метаданные обо всех ваших таблицах.

Пример:

SELECT * FROM `INFORMATION_SCHEMA`.`TABLES`
WHERE TABLE_NAME LIKE 'table1'

Преимущество этого по сравнению с другими методами состоит в том, что вы можете легко использовать запросы, подобные приведенному выше, в качестве подзапросов в других ваших запросах.

Zenshai
источник
6
Разве не так и должно быть information_schema? columns(используя columnsтаблицу вместо tables? Потому tablesчто не содержит никакой информации о том, какие типы столбцов таблицы
Dimitry K
2-е преимущество заключается в том, что информационная схема загружается в память при запуске сервера, поэтому нет необходимости читать hdd
bortunac
да, определенно должны быть ЦВЕТА, а не СТОЛЫ! Это работает удовольствие!
Рассел Фултон
32

используя это:

SHOW CREATE TABLE `users`;

даст вам DDL для этой таблицы

DESCRIBE `users`

будет перечислять столбцы в этой таблице

duckyflip
источник
1
soulmerge, конечно, это заявление DDL для этой таблицы
duckyflip
Да, это утверждение в DDL, но функция C сама по себе не является C. C - это язык, функция в C-программе - это конструкция внутри этого языка.
soulmerge
18
@soulmerge, я тоже педант, но я думаю, что вы здесь не правы: «Французский за« спасибо »- это« мерси »» - вполне приемлемое английское предложение (не меньше, чем «СЛОВО для Франции» и т. д.) и это обобщается на «{{language name}} для {{вещь, которую нужно выразить}}», например «DDL для этой таблицы». «Функция AC сама по себе не является C» - это то же самое, что сказать «французское слово само по себе не французское»: ну, конечно, это не ВСЕ французское, но сказать «Au revoir» - это французский »вряд ли нежелательно (как очевидно это означает, что это ЧАСТЬ французского, а не ВСЕ французского! -).
Алекс Мартелли
@soulmerge. Да, определенно повод для голосования ... Наслаждайтесь!
mate00
Дафукк здесь происходит
Нитон
19
SELECT *
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_SCHEMA = 'test' AND TABLE_NAME ='products'; 

где Table_schemaимя базы данных

Ashish
источник
Есть ли способ выбора информационной схемы. столбцы - таблицы из конкретной базы данных?
Шань
Я использовал этот запрос с моей стороныSELECT TABLE_NAME, COLUMN_NAME, DATA_TYPE, IS_NULLABLE, COLUMN_COMMENT FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'my_db_name' AND TABLE_NAME ='users';
Ахмед Нумаан
8

Вариант первого ответа, который я нашел полезным

Откройте командную строку и введите (вам не нужно входить в свой сервер MySQL)

mysqldump -hlocalhost -u<root> -p<password>  <dbname>  --compact --no-data > </path_to_mydump/>mysql.dmp
LGG
источник
Мне нравится это, это дает создавать заявления.
Thufir
2

ВЫБРАТЬ COLUMN_NAME ИЗ INFORMATION_SCHEMA. COLUMNS ГДЕ TABLE_SCHEMA= 'bodb' И TABLE_NAME= 'abc';

работает для получения всех имен столбцов

Раджа Нагендра Кумар
источник
2

В следующем примере

playgroundимя базы данных и equipmentимя таблицы

Другой способ - использовать SHOW-COLUMNS: 5.5 (доступно также для 5.5>)

$ mysql -uroot -p<password> -h<host> -P<port> -e \
    "SHOW COLUMNS FROM playground.equipment"

И вывод:

mysql: [Warning] Using a password on the command line interface can be insecure.
+-------+-------------+------+-----+---------+----------------+
| Field | Type        | Null | Key | Default | Extra          |
+-------+-------------+------+-----+---------+----------------+
| id    | int(11)     | NO   | PRI | NULL    | auto_increment |
| type  | varchar(50) | YES  |     | NULL    |                |
| quant | int(11)     | YES  |     | NULL    |                |
| color | varchar(25) | YES  |     | NULL    |                |
+-------+-------------+------+-----+---------+----------------+

Можно также использовать mysqlshow-client (также доступен для 5.5>), как показано ниже:

$ mysqlshow -uroot -p<password> -h<host> -P<port> \
    playground equipment

И вывод:

mysqlshow: [Warning] Using a password on the command line interface can be insecure.
Database: playground  Table: equipment
+-------+-------------+-------------------+------+-----+---------+----------------+---------------------------------+---------+
| Field | Type        | Collation         | Null | Key | Default | Extra          | Privileges                      | Comment |
+-------+-------------+-------------------+------+-----+---------+----------------+---------------------------------+---------+
| id    | int(11)     |                   | NO   | PRI |         | auto_increment | select,insert,update,references |         |
| type  | varchar(50) | latin1_swedish_ci | YES  |     |         |                | select,insert,update,references |         |
| quant | int(11)     |                   | YES  |     |         |                | select,insert,update,references |         |
| color | varchar(25) | latin1_swedish_ci | YES  |     |         |                | select,insert,update,references |         |
+-------+-------------+-------------------+------+-----+---------+----------------+---------------------------------+---------+
Шудипта Шарма
источник
0

В наше время люди используют DESCвместо DESCRIPTION. Например:- DESC users;

Sh4dy
источник