Cara mendapatkan struktur basis data di MySQL melalui kueri

171

Apakah mungkin untuk mendapatkan struktur database MySQL, atau hanya beberapa tabel dengan permintaan sederhana?

Atau ada cara lain, bagaimana saya bisa melakukannya?

Jakub Arnold
sumber

Jawaban:

261

Saya pikir apa yang Anda cari DESCRIBE

DESCRIBE table;

Anda juga bisa menggunakan SHOW TABLES

SHOW TABLES;

untuk mendapatkan daftar tabel di database Anda.

Bill the Lizard
sumber
6
Untuk menargetkan penggunaan basis data tertentu: SHOW TABLES FROM database_name
Tarik
109

Untuk mendapatkan seluruh struktur basis data sebagai kumpulan pernyataan CREATE TABLE , gunakan mysqldump :

mysqldump database_name --compact --no-data

Untuk tabel tunggal, tambahkan nama tabel setelah nama db di mysqldump. Anda mendapatkan hasil yang sama dengan SQL dan SHOW CREATE TABLE :

SHOW CREATE TABLE table;

Atau DESCRIBE jika Anda lebih suka daftar kolom:

DESCRIBE table;
Eemeli Kantola
sumber
3
show create tablepersis apa yang saya cari. Terima kasih!
Shai
ini bukan solusinya tetapi saya bersyukur karena saya tidak tahu fungsi ini ada dan hebat!
Ari Waisberg
41

Lihatlah INFORMATION_SCHEMA. TABLESmeja. Berisi metadata tentang semua tabel Anda.

Contoh:

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

Keuntungan dari ini dibandingkan metode lain adalah Anda dapat dengan mudah menggunakan kueri seperti yang di atas sebagai subkueri di kueri lainnya.

Zenshai
sumber
6
Bukankah seharusnya begitu information_schema. columns(menggunakan columnstabel alih-alih tables? Karena tablestidak berisi info tentang tipe kolom kolom mana yang merupakan informasi
Dimitry K
Keuntungan kedua adalah bahwa skema informasi dimuat dalam memori di server mulai sehingga tidak ada hdd membaca perlu
bortunac
ya, pasti harus KOLOM daripada TABEL! Itu berhasil!
Russell Fulton
32

menggunakan ini:

SHOW CREATE TABLE `users`;

akan memberi Anda DDL untuk tabel itu

DESCRIBE `users`

akan mencantumkan kolom dalam tabel itu

duckyflip
sumber
1
soulmerge, yakin itu adalah pernyataan DDL untuk tabel itu
duckyflip
Ya, itu adalah pernyataan dalam DDL, tetapi fungsi C tidak dengan sendirinya C. C adalah bahasa, fungsi dalam program C adalah konstruk dalam bahasa itu.
Soulmerge
18
@soulmerge, saya seorang yang suka mengayuh, tapi saya pikir Anda salah di sini: "Bahasa Prancis untuk 'terima kasih' adalah 'merci'" adalah kalimat bahasa Inggris yang cukup dapat diterima (tidak kurang dari "Kata-kata Perancis untuk", dll) , dan ini digeneralisasi ke "{{nama bahasa}} untuk {{hal untuk diungkapkan}}" "seperti" DDL untuk tabel ini ". "Fungsi AC tidak dengan sendirinya C" adalah sama dengan mengatakan "Kata Prancis bukan dengan sendirinya Prancis": yah itu bukan SEMUA bahasa Prancis tentu saja, tetapi mengatakan "'Au revoir' adalah bahasa Prancis" hampir tidak dapat ditolak (seperti yang jelas itu berarti BAGIAN DARI Perancis, bukan SEMUA DARI Perancis! -).
Alex Martelli
@soulmerge. Ya, pasti alasan untuk memilih ... Nikmati!
mate00
dafuqq terjadi di sini
Niton
19
SELECT *
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_SCHEMA = 'test' AND TABLE_NAME ='products'; 

dimana Table_schemanama database

abu
sumber
apakah ada cara untuk memilih skema informasi. kolom - tabel dari db tertentu?
Shan
Saya menggunakan kueri ini pada akhirnyaSELECT 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
15

Itulah permintaan SHOW CREATE TABLE . Anda dapat meminta TABEL SKEMA juga.

SHOW CREATE TABLE YourTableName;
soulmerge
sumber
8

Variasi dari jawaban pertama yang saya temukan bermanfaat

Buka prompt perintah Anda dan masukkan (Anda tidak harus masuk ke server mysql Anda)

mysqldump -hlocalhost -u<root> -p<password>  <dbname>  --compact --no-data > </path_to_mydump/>mysql.dmp
LGG
sumber
Saya suka ini, itu memberikan pernyataan membuat.
Thufir
2

PILIH COLUMN_NAME DARI INFORMATION_SCHEMA. COLUMNS WHERE TABLE_SCHEMA= 'bodb' AND TABLE_NAME= 'abc';

berfungsi untuk mendapatkan semua nama kolom

Raja Nagendra Kumar
sumber
2

Dalam contoh berikut,

playgroundadalah nama basis data dan equipmentmerupakan nama tabel

Cara lain menggunakan SHOW-COLUMNS: 5.5 (tersedia juga untuk 5.5>)

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

Dan hasilnya:

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

Anda juga dapat menggunakan mysqlshow-client (juga tersedia untuk 5.5>) seperti berikut:

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

Dan hasilnya:

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 |         |
+-------+-------------+-------------------+------+-----+---------+----------------+---------------------------------+---------+
Shudipta Sharma
sumber
0

Saat ini, orang menggunakan DESCbukan DESCRIPTION. Sebagai contoh:- DESC users;

Sh4dy
sumber