programing

데이터베이스 내의 모든 테이블을 하나의 스테이트먼트로 기술하려면 어떻게 해야 합니까?

yoursource 2022. 11. 22. 22:33
반응형

데이터베이스 내의 모든 테이블을 하나의 스테이트먼트로 기술하려면 어떻게 해야 합니까?

데이터베이스 내의 모든 테이블을 설명할 수 있는 문장이 있습니까?

다음과 같은 경우:

describe * from myDB;

라는 말은 없다.describe모든 테이블이 동시에 표시됩니다.그러나 다음과 같은 작업을 수행할 수 있습니다.

SELECT * FROM information_schema.columns WHERE table_schema = 'db_name';

왜냐하면 다른 제안들은 화면을 매우 엉망으로 만들거나 그냥 여기서 묘기를 부리지 않았기 때문이다.

describe table_a; describe table_b; describe table_c; 

등등

Linux 방식을 사용하고 있습니다.먼저 ~/.my.cnf를 생성하여 mysql 사용자 이름과 비밀번호를 저장합니다.다음으로 다음 스니펫을 사용하여 Linux 터미널에서 실행합니다.

테이블 목록을 생성하고 헤더와 awk를 필터링하여 열을 생성합니다.그런 다음 동일한 방법을 사용하여 table_name을 기술합니다.

for i in $(mysql MYDBNAME -e 'SHOW TABLES' | grep -v "Tables_in" | awk '{print $1}'); do echo "TABLE: $i"; mysql MYDBNAME -e "DESC $i"; done

이게 도움이 됐으면 좋겠다.

이것은 @AlexShaffer의 뛰어난 코멘트를 변형한 것으로, Mac 단말기의 mysql 모니터가 테이블을 기술하도록 요구되었을 때 출력되는 내용을 반영하도록 수정되었습니다.

USE information_schema;

SELECT TABLE_NAME 'Table', COLUMN_NAME 'Field', COLUMN_TYPE 'Type', IS_NULLABLE 'Null',
  COLUMN_KEY 'Key', COLUMN_DEFAULT 'Default', EXTRA 'Extra'
FROM information_schema.columns
WHERE table_schema = 'your_db'
ORDER BY TABLE_NAME;
mysql -B -N -u root -pPASSWORD -h somehost \
-e "SELECT DISTINCT CONCAT('describe ', table_name, ';') AS query FROM information_schema.tables WHERE table_schema='DATABASE_NAME_HERE' " | \
mysql -B -N -u root -pPASSWORD -h somehost DATABASE_NAME_HERE

아래와 같이 bash 스크립트를 작성해주세요.자세한 내용이 표시됩니다.

LINUX만 - BASH 스크립트 - descript-all-tables.

#!/bin/sh

echo ""
read -p 'MySQL db: ' DB
echo ""
read -p 'MySQL user: ' USER
echo ""
read -e -p 'MySQL host: ' -i "localhost" HOSTNAME
echo ""
read -s -p 'MySQL password: ' PASSWORD
echo ""

mysql -N -u${USER} ${DB} -p${PASSWORD} -h ${HOSTNAME} --execute="show tables" | while read table; do mysql -u${USER} -h ${HOSTNAME} ${DB} -p${PASSWORD} -v -t --execute="describe $table"; echo -e "\n"; done

사용방법 - /bin/sh descript-all-tables.

mysql 프롬프트에서 명령어를 실행할 때처럼 결과를 "table" 형식으로 표시할 수 있는 방법이 있는지 여부를 알 수 없습니다.다만, 세로 포맷의 모든 테이블에 대해 설명합니다.

mysql -N -uUSER -pPASSWORD DATABASE_NAME --execute="show tables" | while read table; do mysql -uUSER -pPASSWORD DATABASE_NAME --execute="describe $table \G"; done

기본적으로는 데이터베이스 내의 모든 테이블을 Mysql이 기술하는 것은 아닙니다.데이터베이스의 주요 의도 - 단순히 권력을 분산하고 메타데이터를 관리하지만 데이터를 인덱싱하지는 않습니다.

데이터베이스에 연결합니다.mysql [ - u username ][ - hhostname ] database - name

모든 데이터베이스를 나열하려면 MySQL 프롬프트에 show databases를 입력합니다.

다음으로 적절한 데이터베이스를 선택합니다.MyDB 사용;

데이터베이스 내의 모든 테이블을 나열합니다.show tables ;

테이블 설명: description table-name 또는 descript table-name

언급URL : https://stackoverflow.com/questions/20020728/how-can-i-describe-all-tables-in-the-database-through-one-statement

반응형