วิธีรับโครงสร้างฐานข้อมูลใน MySQL ผ่านทางการสืบค้น


171

เป็นไปได้หรือไม่ที่จะได้รับโครงสร้างของฐานข้อมูล MySQL หรือเพียงแค่บางตารางที่มีการสืบค้นง่าย ๆ ?

หรือมีวิธีอื่นฉันจะทำอย่างไร

คำตอบ:


260

ฉันคิดว่าสิ่งที่คุณเป็น DESCRIBE

DESCRIBE table;

คุณยังสามารถใช้ SHOW TABLES

SHOW TABLES;

เพื่อรับรายการตารางในฐานข้อมูลของคุณ


6
เพื่อกำหนดเป้าหมายการใช้ฐานข้อมูลเฉพาะ: SHOW TABLES FROM database_name
Tarik

109

ในการรับโครงสร้างฐานข้อมูลทั้งหมดเป็นชุดของคำสั่ง CREATE TABLEให้ใช้mysqldump :

mysqldump database_name --compact --no-data

สำหรับตารางเดี่ยวเพิ่มชื่อตารางหลังชื่อ db ใน mysqldump คุณได้ผลลัพธ์เดียวกันกับ SQL และSHOW CREATE TABLE :

SHOW CREATE TABLE table;

หรือDESCRIBEหากคุณต้องการรายการคอลัมน์:

DESCRIBE table;

3
show create tableเป็นสิ่งที่ฉันกำลังมองหา ขอบคุณ!
ชัย

นี่ไม่ใช่วิธีแก้ปัญหา แต่ฉันก็น่ากลัวเพราะฉันไม่รู้ว่ามีฟังก์ชันนี้อยู่หรือไม่
Ari Waisberg

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

ใช่แน่นอนควรเป็น COLUMS มากกว่า TABLES! นั่นทำงานได้ดี!
รัสเซลฟุลตัน

32

ใช้สิ่งนี้:

SHOW CREATE TABLE `users`;

จะให้DDLแก่คุณในตารางนั้น

DESCRIBE `users`

จะแสดงรายการคอลัมน์ในตารางนั้น


1
soulmerge แน่ใจว่ามันเป็นคำสั่ง DDL สำหรับตารางที่
duckyflip

ใช่มันเป็นคำสั่งใน DDL แต่ฟังก์ชั่น C ไม่ได้เป็นของตัวเอง C. C เป็นภาษาฟังก์ชั่นในโปรแกรม C คือโครงสร้างภายในภาษานั้น
Soulmerge

18
@ โซลเมอร์ฉันเป็นคนอวดรู้ แต่ฉันคิดว่าคุณผิดที่นี่: "ภาษาฝรั่งเศสสำหรับ 'ขอบคุณ' คือ 'merci'" เป็นประโยคภาษาอังกฤษที่ยอมรับได้ (ไม่น้อยกว่า "The French WORD for" ฯลฯ ) และนี่เป็นการสรุปถึง "{{language name}} สำหรับ {{thing to express}}" เช่น "DDL สำหรับตารางนี้" "ฟังก์ชั่น AC ไม่ใช่ด้วยตัวเอง C" เหมือนกับคำว่า "คำภาษาฝรั่งเศสไม่ใช่ด้วยตัวเองภาษาฝรั่งเศส": แน่นอนว่ามันไม่ใช่ภาษาฝรั่งเศสทั้งหมดแน่นอน แต่การพูดว่า "'Au revoir' เป็นภาษาฝรั่งเศส" แทบจะไม่น่ารังเกียจ มันหมายถึงมันเป็นส่วนหนึ่งของฝรั่งเศสไม่ใช่ของฝรั่งเศสทั้งหมด! -)
Alex Martelli

@soulmerge ใช่เหตุผลที่จะลงคะแนนแน่นอน ... สนุก!
mate00

dafuqq กำลังเกิดขึ้นที่นี่
Niton

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

ที่Table_schemaชื่อฐานข้อมูล


มีวิธีเลือกเค้าร่างข้อมูลหรือไม่ คอลัมน์ - ตารางจาก db เฉพาะหรือไม่
Shan

ฉันใช้แบบสอบถามนี้ในตอนท้ายของฉัน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';
Ahmed Numaan


8

รูปแบบของคำตอบแรกที่ฉันพบว่ามีประโยชน์

เปิดพรอมต์คำสั่งของคุณแล้วป้อน (คุณไม่จำเป็นต้องลงชื่อเข้าใช้เซิร์ฟเวอร์ mysql ของคุณ)

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

ฉันชอบสิ่งนี้มันให้คำสั่งสร้าง
Thufir


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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.