Cách nhận cấu trúc cơ sở dữ liệu trong MySQL thông qua truy vấn


171

Có thể bằng cách nào đó có được cấu trúc của cơ sở dữ liệu MySQL, hoặc chỉ một số bảng với truy vấn đơn giản?

Hoặc có một cách khác, làm thế nào tôi có thể làm điều đó?

Câu trả lời:


260

Tôi nghĩ rằng những gì bạn đang theo đuổi là DESCRIBE

DESCRIBE table;

Bạn cũng có thể dùng SHOW TABLES

SHOW TABLES;

để có được một danh sách các bảng trong cơ sở dữ liệu của bạn.


6
Để nhắm mục tiêu sử dụng cơ sở dữ liệu cụ thể: SHOW TABLES FROM database_name
Tarik

109

Để có được toàn bộ cấu trúc cơ sở dữ liệu dưới dạng một tập hợp các câu lệnh CREATE TABLE , hãy sử dụng mysqldump :

mysqldump database_name --compact --no-data

Đối với các bảng đơn lẻ, thêm tên bảng sau tên db trong mysqldump. Bạn nhận được kết quả tương tự với SQL và SHOW CREATE TABLE :

SHOW CREATE TABLE table;

Hoặc MÔ TẢ nếu bạn thích một danh sách cột:

DESCRIBE table;

3
show create tablechính xác là những gì tôi đang tìm kiếm. Cảm ơn!
Shai

Đây không phải là giải pháp nhưng tôi rất vui vì tôi không biết chức năng này tồn tại và thật tuyệt!
Ari Waisberg

41

Hãy nhìn vào INFORMATION_SCHEMA. TABLESbàn. Nó chứa siêu dữ liệu về tất cả các bảng của bạn.

Thí dụ:

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

Ưu điểm của phương pháp này so với các phương thức khác là bạn có thể dễ dàng sử dụng các truy vấn như truy vấn ở trên làm truy vấn con trong các truy vấn khác của mình.


6
Không phải là nó nên như vậy information_schema. columns(sử dụng columnsbảng thay vì tables? Bởi vì tableskhông chứa bất kỳ thông tin nào về các loại cột trong bảng
Dimitry K

Ưu điểm thứ 2 là lược đồ thông tin được tải trong bộ nhớ khi máy chủ khởi động nên không cần đọc
hececaryary

vâng, chắc chắn nên là MÀU SẮC chứ không phải BẢNG! Đó là một điều trị!
Russell Fulton

32

Sử dụng cái này:

SHOW CREATE TABLE `users`;

sẽ cung cấp cho bạn DDL cho bảng đó

DESCRIBE `users`

sẽ liệt kê các cột trong bảng đó


1
soulmerge, chắc chắn đó là một tuyên bố DDL cho bảng đó
duckyflip

Đúng, đó là một câu lệnh trong DDL, nhưng hàm C không phải là chính nó C. C là một ngôn ngữ, một hàm trong chương trình C là một cấu trúc trong ngôn ngữ đó.
soulmerge

18
@soulmerge, tôi cũng là một giáo viên, nhưng tôi nghĩ bạn đã sai ở đây: "Tiếng Pháp cho 'cảm ơn' là 'merci'" là một câu tiếng Anh khá dễ chấp nhận (không kém gì "Tiếng Pháp WORD cho", v.v.) và điều này khái quát thành "{{tên ngôn ngữ}} cho {{điều cần thể hiện}}", chẳng hạn như "DDL cho bảng này". "Hàm AC không phải là chính nó C" giống như nói "Một từ tiếng Pháp không phải là tiếng Pháp": dĩ nhiên đó không phải là TẤT CẢ tiếng Pháp, nhưng nói "'Au revoir' là tiếng Pháp" thì khó có thể phản đối (rõ ràng là nó có nghĩa là nó là một phần của tiếng Pháp, không phải TẤT CẢ tiếng Pháp! -).
Alex Martelli

@soulmerge. Vâng, chắc chắn là một lý do để bỏ phiếu ... Thưởng thức!
mate00

dafuqq đang diễn ra ở đây
Niton

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

Table_schematên cơ sở dữ liệu ở đâu


Có một cách để chọn lược đồ thông tin. cột - bảng từ db cụ thể?
Shan

Tôi đã sử dụng truy vấn này vào cuối của tôiSELECT TABLE_NAME, COLUMN_NAME, DATA_TYPE, IS_NULLABLE, COLUMN_COMMENT FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'my_db_name' AND TABLE_NAME ='users';
Ahmed Numaan


8

Một biến thể của câu trả lời đầu tiên mà tôi thấy hữu ích

Mở dấu nhắc lệnh của bạn và nhập (bạn không cần phải đăng nhập vào máy chủ mysql của bạn)

mysqldump -hlocalhost -u<root> -p<password>  <dbname>  --compact --no-data > </path_to_mydump/>mysql.dmp

Tôi thích điều này, nó đưa ra các tuyên bố tạo.
Thufir

2

CHỌN COLUMN_NAME TỪ INFORMATION_SCHEMA. COLUMNS WHERE TABLE_SCHEMA= 'bodb' AND TABLE_NAME= 'abc';

hoạt động để có được tất cả các tên cột


2

Trong ví dụ sau,

playgroundlà tên cơ sở dữ liệu và equipmentlà tên bảng

Một cách khác là sử dụng SHOW-COLUMNS: 5.5 (cũng có sẵn cho 5.5>)

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

Và đầu ra:

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    |                |
+-------+-------------+------+-----+---------+----------------+

Người ta cũng có thể sử dụng mysqlshow-client (cũng có sẵn 5.5>) như sau:

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

Và đầu ra:

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

Ngày nay, mọi người sử dụng DESCthay thế DESCRIPTION. Ví dụ:- DESC users;

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.