Sorgu yoluyla MySQL'de veritabanı yapısı nasıl elde edilir


171

Bir şekilde MySQL veritabanının yapısını elde etmek mümkün mü, yoksa basit sorgu içeren bir tablo mu?

Yoksa başka bir yol var mı, nasıl yapabilirim?

Yanıtlar:


260

Bence peşinde olduğun şey DESCRIBE

DESCRIBE table;

Ayrıca kullanabilirsiniz SHOW TABLES

SHOW TABLES;

veritabanınızdaki tabloların bir listesini almak için.


6
Belirli bir veritabanı kullanımını hedeflemek için: SHOW TABLES FROM database_name
Tarik

109

Veritabanı yapısının tamamını CREATE TABLE ifadeleri kümesi olarak almak için mysqldump kullanın :

mysqldump database_name --compact --no-data

Tek tablolar için, mysqldump içinde db adından sonra tablo adını ekleyin. SQL ve SHOW CREATE TABLE ile aynı sonuçları elde edersiniz :

SHOW CREATE TABLE table;

Veya bir sütun listesini tercih ediyorsanız DESCRIBE :

DESCRIBE table;

3
show create tabletam olarak aradığım şeydi. Teşekkürler!
Shai

Bu çözüm değil ama minnettarım çünkü bu fonksiyonun var olduğunu ve harika olduğunu bilmiyordum!
Ari Waisberg

41

Bir göz atın INFORMATION_SCHEMA. TABLEStablo. Tüm tablolarınızla ilgili meta veriler içerir.

Misal:

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

Bunun diğer yöntemlere göre avantajı, yukarıdaki gibi sorguları diğer sorgularınızda alt sorgu olarak kolayca kullanabilmenizdir.


6
Olması gereken değil mi information_schema? columns( columnsbunun yerine tablo kullanılıyor tablesmu? Çünkü tablestablo sütunlarının hangi türlerde olduğu hakkında bilgi içermiyor
Dimitry K

2. avantajı, bilgi şemasının sunucu başlangıcında belleğe yüklenmesi, dolayısıyla hdd okuma gerektirmemesi
bortunac

evet, kesinlikle TABLOLAR yerine COLUMS olmalı! Bu bir tedavi işe yarıyor!
Russell Fulton

32

bunu kullanarak:

SHOW CREATE TABLE `users`;

size bu tablo için DDL verecek

DESCRIBE `users`

bu tablodaki sütunları listeler


1
soulmerge, bu tablo için bir DDL ifadesi olduğundan emin olun
duckyflip

Evet, bu bir DDL'deki bir deyimdir, ancak C işlevi tek başına C değildir. C bir dildir, C programındaki bir işlev bu dil içindeki bir yapıdır.
soulmerge

18
@soulmerge, ben de bilgiçim, ama burada yanlış olduğunu düşünüyorum: "Teşekkürler için Fransızca 'merci'" oldukça kabul edilebilir bir İngilizce cümledir (en az "Fransızca WORD", vb.) ve bu, "Bu tablo için DDL" gibi "{{ifade edilecek şey}} için {{dil adı}}" olarak genelleme yapar. "AC işlevi tek başına C değil" "Fransızca bir kelime tek başına Fransızca değil" demekle aynıdır: elbette TÜM Fransızca değil, ama "Au revoir" Fransızca "demek pek sakıncalıdır bu Fransızca'nın bir parçası olduğu anlamına gelir, TÜM Fransızca değil!).
Alex Martelli

@soulmerge. Evet, kesinlikle oy vermek için bir sebep ... Keyfini çıkarın!
mate00

dafuqq burada
Niton

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

Table_schemaveritabanı adı nerede


bilgi şemasını seçmenin bir yolu var mı? sütunlar - belirli db tablolar?
Shan

Sonunda bu sorguyu kullandımSELECT 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

Yararlı bulduğum ilk cevabın bir varyasyonu

Komut isteminizi açın ve girin (mysql sunucunuza giriş yapmanız gerekmez)

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

Bunu beğendim, create ifadeleri verir.
Thufir

2

SEÇ COLUMN_NAME DAN INFORMATION_SCHEMA. COLUMNS NEREDE TABLE_SCHEMA= 'bodb' AND TABLE_NAME= 'abc';

tüm sütun adlarını almak için çalışır


2

Aşağıdaki örnekte,

playgroundveritabanı adı ve equipmenttablo adıdır

Başka bir yol da SHOW-COLUMNS: 5.5 (için de kullanılabilir 5.5>) kullanmaktır

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

Ve çıktı:

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

Bir de aşağıdaki gibi mysqlshow-client (için de kullanılabilir 5.5>) kullanabilirsiniz:

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

Ve çıktı:

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

Günümüzde insanlar DESCbunun yerine kullanıyor DESCRIPTION. Örneğin:- DESC users;

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.