Як отримати структуру бази даних в MySQL за допомогою запиту


171

Чи можна якось отримати структуру бази даних MySQL або просто якусь таблицю з простим запитом?

Або є інший спосіб, як це зробити?

Відповіді:


260

Я думаю, що те, що ти шукаєш, це DESCRIBE

DESCRIBE table;

Ви також можете використовувати SHOW TABLES

SHOW TABLES;

щоб отримати список таблиць у вашій базі даних.


6
Для націлювання на конкретні бази даних: SHOW TABLES FROM database_name
Тарік

109

Щоб отримати всю структуру бази даних як набір операторів CREATE TABLE , використовуйте mysqldump :

mysqldump database_name --compact --no-data

Для одиночних таблиць додайте ім'я таблиці після імені db в 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'

Перевага цього в порівнянні з іншими методами полягає в тому, що ви можете легко використовувати такі запити, як зазначений вище, як підзапити в інших запитах.


6
Хіба це не так information_schema. columns(використовуючи columnsтаблицю замість tables? Тому tablesщо не містить жодної інформації про типи стовпців таблиці
Dimitry K

2-а перевага полягає в тому, що інформаційна схема завантажується в пам'ять при запуску сервера, тому немає необхідності читання hdd
bortunac

так, безумовно, повинні бути КОЛОМИ, а не ТАБЛИЦІ! Це працює частування!
Рассел Фултон

32

використовуючи це:

SHOW CREATE TABLE `users`;

дасть вам DDL для цієї таблиці

DESCRIBE `users`

відобразить стовпці в цій таблиці


1
soulmerge, впевнений, що це заява DDL для цієї таблиці
duckyflip

Так, це твердження в DDL, але функція C сама по собі не є C. C - це мова, функція в програмі C - це конструкція всередині цієї мови.
соумергер

18
@soulmerge, я теж педант, але я думаю, що ви тут помиляєтеся: "Французький за" спасибі "- це" мерсі "- це цілком прийнятне англійське речення (не менше, ніж" Французьке слово за "тощо) , і це узагальнює "{{ім'я мови}} для {{thing to express}}", наприклад "DDL для цієї таблиці". "Функція змінного струму сама по собі не є C" - це те саме, що говорити "Французьке слово не саме по собі французьке": ну це, звичайно, не ВСЕ французькою мовою, але сказати "Au revoir" є французькою "навряд чи заперечно (як очевидно це означає, що це ЧАСТИНА французької, а не ВСЕ французької! -).
Алекс Мартеллі

@soulmerge. Так, безумовно, причина проголосувати проти ... Насолоджуйтесь!
mate00

dafuqq відбувається тут
Niton

19
SELECT *
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_SCHEMA = 'test' AND TABLE_NAME ='products'; 

де Table_schemaім'я бази даних


чи є спосіб вибору інформаційної схеми. стовпці - таблиці від конкретного db?
Шань

Я використав цей запит у своєму кінці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

Мені це подобається, він дає заяви про створення.
Туфір


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-клієнт (також доступний для 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;

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.