Mysql/Mariadb 테이블 명세서 쿼리로 다양한 프로그램 값 추출 방법

Mysql/Mariadb 테이블 명세서 쿼리로 다양한 프로그램 값 추출 방법을 알아보겠습니다.

Mysql 테이블 명세서 샘플 생성


CREATE TABLE customers
(
  customerNumber         int            NOT NULL
    PRIMARY KEY,
  customerName           varchar(50)    NOT NULL,
  contactLastName        varchar(50)    NOT NULL,
  contactFirstName       varchar(50)    NOT NULL,
  phone                  varchar(50)    NOT NULL,
  addressLine1           varchar(50)    NOT NULL,
  addressLine2           varchar(50)    NULL,
  city                   varchar(50)    NOT NULL,
  state                  varchar(50)    NULL,
  postalCode             varchar(15)    NULL,
  country                varchar(50)    NOT NULL,
  salesRepEmployeeNumber int            NULL,
  creditLimit            decimal(10, 2) NULL,
);
SELECT c.column_name    AS name,
       c.column_type    AS type,
       c.column_comment AS 'comment',
       c.is_nullable    AS 'Null 허용',
       c.column_key     AS 'key',
       t.table_schema   AS 데이터베이스
FROM information_schema.columns c
       JOIN information_schema.tables t ON t.table_name = c.table_name AND c.TABLE_SCHEMA = t.TABLE_SCHEMA
WHERE t.TABLE_SCHEMA = 'classicmodels'
  AND t.table_name = 'customers'
ORDER BY c.table_name ASC
       , c.ordinal_position ASC;

제공된 쿼리 코드는 ‘classicmodels’ 데이터베이스의 ‘customers’ 테이블의 열(Column)에 대한 정보를 조회하는 코드입니다.
SELECT 문을 사용하여 column_name을 ‘name’으로, column_type을 ‘type’으로, column_comment를 ‘comment’로, is_nullable을 ‘Null 허용’으로, column_key를 ‘key’로, 그리고 table_schema를 ‘데이터베이스’로 조회하고 있습니다.
information_schema.columns와 information_schema.tables을 조인하여 customers 테이블 정보를 가져옵니다.

이 쿼리는 테이블 명세서 프로그램을 생성하거나 테이블의 열에 대한 특정 정보를 조회할 때 유용합니다. ‘customers’ 테이블의 열에 대한 이름, 타입, 설명, Null 허용 여부, 키 등의 종합적인 개요를 제공합니다. 결과는 모델 생성, 문서화 작업, 데이터 분석 등 다양한 방식으로 추가 처리하거나 활용할 수 있습니다.

information_schema.columns:

테이블은 데이터베이스의 모든 테이블에 대한 열(컬럼) 정보를 포함합니다. 이 테이블은 열의 이름, 데이터 형식, 키 정보, Null 허용 여부 등을 제공합니다. 예를 들어, 열의 이름을 확인하거나 열의 데이터 형식을 확인하고자 할 때 이 테이블을 사용할 수 있습니다. 또한, 키 정보와 Null 허용 여부를 통해 데이터베이스 스키마의 구조를 파악할 수 있습니다. 이 정보는 데이터베이스 디자인 및 쿼리 작성에 매우 유용합니다.

information_schema.tables:

테이블은 데이터베이스의 모든 테이블에 대한 정보를 포함합니다. 이 테이블은 테이블의 이름, 스키마, 데이터베이스, 테이블 유형 등을 제공합니다. 예를 들어, 데이터베이스에 어떤 테이블들이 있는지 확인하거나 특정 테이블의 스키마를 파악하고자 할 때 이 테이블을 사용할 수 있습니다. 또한, 테이블의 유형을 확인하여 일반 테이블인지 뷰인지 등을 구분할 수 있습니다. 이 정보는 데이터베이스 구조를 이해하고 데이터를 확인하는데 도움을 줍니다.

프로그램 변수값 활용

CONCAT 함수를 이용하여 html input 코드와 javascript 변수 값을 만들 때도 활용이 가능합니다.

html input tag

SELECT CONCAT('<input type="hidden" name="', c.column_name, '" id="', c.column_name,'"', ' value="<?=?>"') AS 'html'
FROM information_schema.columns c
       JOIN information_schema.tables t ON t.table_name = c.table_name AND c.TABLE_SCHEMA = t.TABLE_SCHEMA
WHERE t.TABLE_SCHEMA = 'classicmodels'
  AND t.table_name = 'customers'
ORDER BY c.table_name ASC
       , c.ordinal_position ASC;

+--------------------------------------------------------------------------------------------+
|html                                                                                        |
+--------------------------------------------------------------------------------------------+
|<input type="hidden" name="customerNumber" id="customerNumber" value="<?=?>"                |
|<input type="hidden" name="customerName" id="customerName" value="<?=?>"                    |
|<input type="hidden" name="contactLastName" id="contactLastName" value="<?=?>"              |
|<input type="hidden" name="contactFirstName" id="contactFirstName" value="<?=?>"            |
|<input type="hidden" name="phone" id="phone" value="<?=?>"                                  |
|<input type="hidden" name="addressLine1" id="addressLine1" value="<?=?>"                    |
|<input type="hidden" name="addressLine2" id="addressLine2" value="<?=?>"                    |
|<input type="hidden" name="city" id="city" value="<?=?>"                                    |
|<input type="hidden" name="state" id="state" value="<?=?>"                                  |
|<input type="hidden" name="postalCode" id="postalCode" value="<?=?>"                        |
|<input type="hidden" name="country" id="country" value="<?=?>"                              |
|<input type="hidden" name="salesRepEmployeeNumber" id="salesRepEmployeeNumber" value="<?=?>"|
|<input type="hidden" name="creditLimit" id="creditLimit" value="<?=?>"                      |
+--------------------------------------------------------------------------------------------+

javascript 변수값

SELECT CONCAT('const ', c.column_name, ' = ', 'document.querySelector(''#', c.column_name,''');') AS 'javascript'
FROM information_schema.columns c
       JOIN information_schema.tables t ON t.table_name = c.table_name AND c.TABLE_SCHEMA = t.TABLE_SCHEMA
WHERE t.TABLE_SCHEMA = 'classicmodels'
  AND t.table_name = 'customers'
ORDER BY c.table_name ASC
       , c.ordinal_position ASC;

+---------------------------------------------------------------------------------+
|javascript                                                                       |
+---------------------------------------------------------------------------------+
|const customerNumber = document.querySelector('#customerNumber');                |
|const customerName = document.querySelector('#customerName');                    |
|const contactLastName = document.querySelector('#contactLastName');              |
|const contactFirstName = document.querySelector('#contactFirstName');            |
|const phone = document.querySelector('#phone');                                  |
|const addressLine1 = document.querySelector('#addressLine1');                    |
|const addressLine2 = document.querySelector('#addressLine2');                    |
|const city = document.querySelector('#city');                                    |
|const state = document.querySelector('#state');                                  |
|const postalCode = document.querySelector('#postalCode');                        |
|const country = document.querySelector('#country');                              |
|const salesRepEmployeeNumber = document.querySelector('#salesRepEmployeeNumber');|
|const creditLimit = document.querySelector('#creditLimit');                      |
+---------------------------------------------------------------------------------+

테이블 정보를 통해 다양한 정보 구조를 만들어 프로그램 코드에 쉽게 사용할 수 있습니다.

Leave a Comment