쿼리를 통해 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

단일 테이블의 경우 mysqldump에서 db 이름 뒤에 테이블 이름을 추가하십시오. SQL과 SHOW CREATE TABLE을 사용하여 동일한 결과를 얻습니다 .

SHOW CREATE TABLE table;

열 목록을 선호하는 경우 DESCRIBE 또는

DESCRIBE table;

3
show create table내가 찾던 것입니다. 감사!
Shai

이것은 해결책이 아니지만이 기능이 존재하고 훌륭하다는 것을 알지 못했기 때문에 감사합니다!
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

어떤 하드 디스크가 neccesary 읽는하지 않도록 두번째 장점은 정보 스키마는 서버 시작시 메모리에로드되어
bortunac

예, 반드시 테이블이 아닌 COLUMS 여야합니다! 그것은 치료를 작동합니다!
Russell Fulton

32

이것을 사용하여 :

SHOW CREATE TABLE `users`;

해당 테이블에 대한 DDL 을 제공 합니다

DESCRIBE `users`

해당 테이블의 열을 나열합니다.


1
soulmerge, 그것은 그 테이블에 대한 DDL 문장입니다
duckyflip

그렇습니다. 이것은 DDL의 문장이지만 C 함수 자체는 C가 아닙니다. C는 언어이고 C 프로그램의 함수는 해당 언어 내의 구조입니다.
soulmerge

18
@soulmerge, 나는 또한 pedant이지만, 나는 당신이 여기에 틀렸다고 생각합니다. " 'thanks'에 대한 프랑스어는 'merci'입니다." "이 테이블의 DDL"과 같이 "{{thing to express}}의 {{language name}}"으로 일반화됩니다. "AC 기능 자체는 C가 아닙니다."는 "프랑스어 자체가 프랑스어가 아닙니다"라고 말하는 것과 같습니다. 물론 모든 프랑스어가 아닙니다. 그러나 " 'Au revoir'는 프랑스어입니다"라고 말하는 것은 거의 불가능합니다. 그것은 프랑스어의 일부가 아니라 프랑스어의 일부임을 의미합니다!-).
Alex Martelli

@ 영혼. 예, 확실히 투표를해야 할 이유는 ... 즐기십시오!
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

COLUMN_NAME FROM에서 선택하십시오 INFORMATION_SCHEMA. COLUMNS 어디에 TABLE_SCHEMA= 'bodb'AND TABLE_NAME= 'abc';

모든 열 이름을 가져옵니다.


2

다음 예에서

playground데이터베이스 이름이고 equipment테이블 이름입니다.

또 다른 방법은 사용 SHOW-열 : 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;

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.