[MySQL] Information Schema - System : 2번째

■ EFERENTIAL_CONSTRAINTS Table

• REFERENTIAL_CONSTRAINTS 테이블은 외부참조 키에 대한 정보를 제공합니다.

 컬럼의 정보는 다음과 같습니다.

 

• CONSTRAINT_CATALOG

The name of the catalog to which the constraint belongs. This value is always def.

제약조건이 속한 카탈로그의 이름입니다.  값은 항상 def입니다.

 

• CONSTRAINT_SCHEMA

제약조건이 속한 스키마 (데이터베이스) 이름입니다.

 

• CONSTRAINT_NAME

제약조건의 이름입니다.

 

• UNIQUE_CONSTRAINT_CATALOG

제약 조건이 참조하는 유니크한 제약 조건이 포함된 카탈로그의 이름입니다.  값은 항상 def입니다.

 

• UNIQUE_CONSTRAINT_SCHEMA

제약 조건이 참조하는 유니크 제약 조건을 포함하는 스키마 (데이터베이스) 이름입니다.

 

• UNIQUE_CONSTRAINT_NAME

제약 조건이 참조하는 유니크 제약 조건의 이름입니다.

 

• MATCH_OPTION

제약 조건 MATCH 속성의 값입니다. 현재 유효한 값은 NONE뿐입니다.

 

• UPDATE_RULE

제한 조건 ON UPDATE 속성의 값입니다. 가능한 값은 CASCADE, SET NULL, SET DEFAULT, RESTRICT, NO ACTION입니다.

 

• DELETE_RULE

제약 조건 ON DELETE 속성의 값입니다. 가능한 값은 CASCADE, SET NULL, SET DEFAULT, RESTRICT, NO ACTION입니다.

 

• TABLE_NAME

테이블의 이름입니다.  값은 TABLE_CONSTRAINTS 테이블에서와 동일합니다.

 

• REFERENCED_TABLE_NAME

제약 조건에서 참조하는 테이블의 이름입니다.

 

 

 

■ ROUTINES Table

ROUTINES 테이블은 스토어드 루틴 (스토어드 프로 시저  스토어드 함수) 대한 정보를 제공합니다. ROUTINES 테이블에는 내장SQL 함수 또는 사용자 정의 함수 (UDF) 포함되지 않습니다.

"mysql.proc 이름"이라는 컬럼은 INFORMATION_SCHEMA ROUTINES 테이블 컬럼 (있는 경우) 해당하는 mysql.proc 테이블 컬럼을 나타냅니다.

 컬럼의 정보는 다음과 같습니다.

 

• SPECIFIC_NAME

루틴의 이름입니다.

 

• ROUTINE_CATALOG

루틴이 속한 카탈로그의 이름입니다.  값은 항상 def입니다.

 

• ROUTINE_SCHEMA

루틴이 속한 스키마(데이터베이스) 이름입니다.

 

• ROUTINE_NAME

루틴의 이름입니다.

 

• ROUTINE_TYPE

저장 프로 시저의 경우 PROCEDURE, 저장 함수의 경우 FUNCTION으로 표기됩니다.

 

• DATA_TYPE

루틴이 저장된 함수  경우 반환  데이터 유형입니다. 루틴이 스토어드 프로 시저인 경우  값은 비어 있습니다.

DATA_TYPE 값은 다른 정보가없는 유형 이름입니다. DTD_IDENTIFIER 값에는 유형 이름과 정밀도 또는 길이와 같은 기타 정보가 포함됩니다.

 

• CHARACTER_MAXIMUM_LENGTH

저장된 함수 문자열 반환 값의 경우 최대 문자 길이입니다. 루틴이 스토어드 프로 시저  경우  값은 NULL입니다.

 

• CHARACTER_OCTET_LENGTH

스토어드 함수 문자열 반환 값의 경우 최대 길이 (바이트)입니다. 루틴이 스토어드 프로 시저인 경우  값은 NULL입니다.

 

• NUMERIC_PRECISION

스토어드 함수 숫자 반환 값의 경우 숫자 정밀도입니다. 루틴이 스토어드 프로시저인 경우  값은 NULL입니다.

 

• NUMERIC_SCALE

스토어드 함수 숫자 반환 값의 경우 숫자 스케일입니다. 루틴이 스토어드 프로시저인 경우  값은 NULL입니다.

 

• DATETIME_PRECISION

스토어드 함수 시간 반환 값의 경우, 소수점 초의 자리수입니다.( : '2018-09-08 17:51:04.777')

루틴이 스토어드 프로시저인 경우  값은 NULL입니다.

 

• CHARACTER_SET_NAME

스토어드 함수 문자열 반환 값의 경우 문자 집합 이름입니다. 루틴이 스토어드 프로 시저  경우이 값은 NULL입니다.

 

• COLLATION_NAME

저장된 함수 문자열 반환 값의 경우 데이터 정렬 이름입니다. 루틴이 스토어드 프로 시저  경우이 값은 NULL입니다.

 

• DTD_IDENTIFIER

루틴이 저장된 함수  경우 반환  데이터 유형입니다. 루틴이 스토어드 프로 시저  경우이 값은 비어 있습니다.

DATA_TYPE 값은 다른 정보가없는 유형 이름입니다. DTD_IDENTIFIER 값에는 유형 이름과 정밀도 또는 길이와 같은 기타 정보가 포함됩니다.

 

• ROUTINE_BODY

루틴 정의에 사용되는 언어입니다.  값은 항상 SQL입니다.

 

• ROUTINE_DEFINITION

루틴에 의해 실행된 SQL 문의 텍스트.

 

• EXTERNAL_NAME

이값은 항상 NULL입니다.

 

• EXTERNAL_LANGUAGE

스토어드 루틴의 언어입니다. MySQL EXTERNAL_LANGUAGE 다음과 같이 계산합니다.

- mysql.proc.language = 'SQL'이면 EXTERNAL_LANGUAGE NULL입니다.

- 그렇지 않으면 EXTERNAL_LANGUAGE mysql.proc.language 있습니다. 그러나 아직 외부 언어가 없으므로 항상 NULL입니다.

 

• PARAMETER_STYLE

 값은 항상 SQL입니다.

 

• IS_DETERMINISTIC

루틴이 DETERMINISTIC 특성으로 정의되었는지 여부에 따라 YES 또는 NO 표시됩니다.

 

• SQL_DATA_ACCESS

루틴에 대한 데이터 액세스 특성입니다. 값은 CONTAINS SQL, NO SQL, READS SQL DATA 또는 MODIFIES SQL DATA  하나입니다.

 

• SQL_PATH

 값은 항상 NULL입니다.

 

• SECURITY_TYPE

루틴 SQL SECURITY 특성입니다. 값은 DEFINER 또는 INVOKER  하나입니다.

 

• CREATED

루틴이 작성된 날짜  시간입니다. 이것은 TIMESTAMP 값입니다.

 

• LAST_ALTERED

루틴이 마지막으로 수정된 날짜  시간입니다. 이것은 TIMESTAMP 값입니다. 루틴이 작성된 이후 수정되지 않은 경우  값은 CREATED 값과 동일합니다.

 

• SQL_MODE

루틴이 작성 또는 변경   적용되고 루틴이 실행되는 SQL 모드입니다.

 

• ROUTINE_COMMENT

루틴에 주석이 있는 경우 주석 텍스트입니다. 그렇지 않은 경우,  값은 비어 있습니다.

 

• DEFINER

'user_name'@'host_name'형식의 DEFINER(일반적으로 루틴을 만든 사용자) 이름이 지정된 계정입니다.

 

• CHARACTER_SET_CLIENT

루틴이 작성될  character_set_client 시스템 변수의 세션 값입니다.

 

• COLLATION_CONNECTION

루틴이 작성되었을  collation_connection 시스템 변수의 세션값입니다.

 

• DATABASE_COLLATION

루틴이 연관된 데이터베이스의 데이터 정렬입니다.

 

참고사항

루틴에 대한 정보를 보려면 루틴 DEFINER 절에 이름이 지정된 사용자이거나 mysql.proc 테이블에 대한 SELECT 액세스 권한이 있어야합니다. 루틴 자체에 대한 권한이 없는 경우 ROUTINE_DEFINITION 열에 대해 표시되는 값은 NULL입니다.

저장된 함수 반환 값에 대한 정보는 PARAMETERS 테이블에서도 사용할  있습니다. 저장된 함수의 반환  행은 ORDINAL_POSITION 값이 0 행으로 식별   있습니다.

 

 

■ SCHEMATA Table

스키마는 데이터베이스이므로 SCHEMATA 테이블은 데이터베이스에 대한 정보를 제공합니다.

 컬럼의 정보는 다음과 같습니다.

 

• CATALOG_NAME

스키마가 속한 카탈로그의 이름입니다.  값은 항상 def입니다.

 

• SCHEMA_NAME

스키마 이름입니다.

 

• DEFAULT_CHARACTER_SET_NAME

스키마의 기본 캐릭터셋입니다.

 

• DEFAULT_COLLATION_NAME

스키마 기본 데이터 정렬입니다.

 

• SQL_PATH

 값은 항상 NULL입니다.

 

• SQL  명령어 조회

SHOW DATABASES 문에서도 스키마 이름을 사용할  있습니다. 사용법은 다음과 같습니다.

SELECT SCHEMA_NAME AS `Database`
  FROM INFORMATION_SCHEMA.SCHEMATA
  [WHERE SCHEMA_NAME LIKE 'wild']

SHOW DATABASES
  [LIKE 'wild']

전역 SHOW DATABASES 권한이 없는 경우 특정 종류의 권한이 있는 데이터베이스만 표시됩니다.

 

 유의사항

전역 권한은 모든 데이터베이스에 대한 권한으로 간주되기 때문에 모든 전역 권한을 사용하면 SHOW DATABASES 사용하거나 INFORMATION_SCHEMA SCHEMATA 테이블을 검사하여 모든 데이터베이스 이름을   있습니다.

 

 

 

■ SCHEMA_PRIVILEGES Table

SCHEMA_PRIVILEGES 테이블은 스키마 (데이터베이스) 권한에 대한 정보를 제공합니다. mysql.db 시스템 테이블에서 값을 가져옵니다.

 컬럼의 정보는 다음과 같습니다.

 

• GRANTEE

The name of the account to which the privilege is granted, in 'user_name'@'host_name' format.

권한이 부여된 계정의 이름이며 'user_name'@ 'host_name'형식입니다.

 

• TABLE_CATALOG

스키마가 속한 카탈로그의 이름입니다.  값은 항상 def입니다.

 

• TABLE_SCHEMA

스키마 이름입니다.

 

• PRIVILEGE_TYPE

부여된 권한입니다. 값은 스키마 레벨에서 부여할  있는 모든 권한이   있습니다.  행은 단일 권한을 나열하므로  부여자가 보유한 스키마 권한당 하나의 행이 있습니다.

 

• IS_GRANTABLE

사용자에게 GRANT OPTION 권한이 있으면 YES, 그렇지 않으면 NO. 출력에는 GRANT OPTION PRIVILEGE_TYPE = 'GRANT OPTION' 별도의 행으로 나열되지 않습니다.

 

 참고사항.

SCHEMA_PRIVILEGES 비표준 INFORMATION_SCHEMA 테이블입니다.

 

 중요사항.

다음 명령문은 동일하지 않습니다. 반드시 구분해야 합니다.

1. SELECT ... FROM INFORMATION_SCHEMA.SCHEMA_PRIVILEGES

2. SHOW GRANTS ...

 

 

 

■ STATISTICS Table

STATISTICS 테이블은 테이블 인덱스에 대한 정보를 제공합니다.

 컬럼의 정보는 다음과 같습니다.

 

• TABLE_CATALOG

인덱스를 포함하는 테이블이 속한 카탈로그의 이름입니다.  값은 항상 def입니다.

 

• TABLE_SCHEMA

인덱스가 포함  테이블이 속한 스키마 (데이터베이스) 이름입니다.

 

• TABLE_NAME

인덱스가 포함  테이블의 이름입니다.

 

• NON_UNIQUE

인덱스에 중복을 포함   없으면 0, 가능하면 1입니다.

 

• INDEX_SCHEMA

인덱스가 속한 스키마 (데이터베이스) 이름입니다.

 

• INDEX_NAME

색인의 이름입니다. 인덱스가 기본 키인 경우 이름은 항상 PRIMARY입니다.

 

• SEQ_IN_INDEX

1 시작하는 인덱스의 컬럼 시퀀스 번호입니다.

 

• COLUMN_NAME

 이름입니다. EXPRESSION 컬럼에 대한 설명도  참조합니다.

 

• COLLATION

인덱스에서 열이 정렬되는 방식. A(오름차순), D(내림차순) 또는 NULL(정렬되지 않음) 값을 가질  있습니다.

 

• CARDINALITY

인덱스의 고유값 수에 대한 추정치입니다.  번호를 업데이트하려면 InnoDB일경우 ANALYZE TABLE 또는 MyISAM 테이블의 경우 myisamchk -a 실행합니다.

CARDINALITY 정수로 저장된 통계를 기반으로 계산되므로 작은 테이블에서도 값이 반드시 정확하지는 않습니다. 카디널리티가 높을수록 MySQL 조인을 수행할  인덱스를 사용할 가능성이 높아집니다.

 

• SUB_PART

색인 접두사. , 열이 부분적으로  인덱싱  경우 인덱싱  문자 , 전체 열이 인덱싱  경우 NULL입니다.

- 참고사항

접두사 제한은 바이트 단위로 측정됩니다. 그러나 CREATE TABLE, ALTER TABLE  CREATE INDEX 문의 인덱스 사양에 대한 접두사 길이는 바이너리가 아닌 문자열 유형(CHAR, VARCHAR, TEXT) 문자 수와 바이너리 문자열 유형 (BINARY, VARBINARY, BLOB) 바이트 수로 해석됩니다. 멀티 바이트 문자 세트를 사용하는 바이너리가 아닌 문자열 컬럼의 접두사 길이를 지정할  이를 고려해야 합니다.

 

• PACKED

키가 패킹되는 방법을 나타냅니다. 그렇지 않은 경우 NULL입니다.

 

• NULLABLE

Contains YES if the column may contain NULL values and '' if not.

열에 NULL 값이 포함될  있는 경우 YES 포함하며, 그렇지 않은 경우 '' 포함합니다.

 

• INDEX_TYPE

사용  인덱스 방법 (BTREE, FULLTEXT, HASH, RTREE) 표시합니다.

 

• COMMENT

인덱스가 비활성화된 경우 비활성화되는 것과 같이 자체 컬럼에 설명되지 않은 인덱스에 대한 정보입니다.

 

• INDEX_COMMENT

인덱스가 작성될  COMMENT속성이 있는 인덱스에 제공된 모든 주석입니다.

 

 참고사항.

인덱스에 대한 표준 INFORMATION_SCHEMA 테이블이 없습니다. MySQL컬럼 목록은 QUALIFIER  OWNER 각각 CATALOG  SCHEMA 대체된다는 점을 제외하면 SQL Server 2000 sp_statistics 대해 반환하는 것과 유사합니다.

 

• SQL  명령어 조회

테이블 인덱스에 대한 정보는 SHOW INDEX 문에서도 사용할  있습니다. 다음과 같이 사용됩니다.

SELECT * FROM INFORMATION_SCHEMA.STATISTICS
  WHERE table_name = 'tbl_name'
  AND table_schema = 'db_name'

SHOW INDEX
  FROM tbl_name
  FROM db_name

 

 

■ TABLES Table

TABLES 테이블은 데이터베이스의 테이블에 대한 정보를 제공합니다.

 컬럼의 정보는 다음과 같습니다.

 

• TABLE_CATALOG

테이블이 속한 카탈로그의 이름입니다.  값은 항상 def입니다.

 

• TABLE_SCHEMA

테이블이 속한 스키마 (데이터베이스) 이름입니다.

 

• TABLE_NAME

테이블 이름입니다.

 

• TABLE_TYPE

테이블의 경우 BASE TABLE, 뷰의 경우 VIEW, INFORMATION_SCHEMA 테이블의 경우 SYSTEM VIEW.

TABLES 테이블은 TEMPORARY 테이블을 나열하지 않습니다.

 

• ENGINE

테이블의 스토리지 엔진입니다.

파티션을 나눈 테이블의 경우 ENGINE 모든 파티션에서 사용하는 스토리지 엔진의 이름을 표시합니다.

 

• VERSION

테이블 .frm 파일의 버전 번호입니다.

 

• ROW_FORMAT

 저장 형식(고정, 동적, 압축, 중복, 압축[Fixed, Dynamic, Compressed, Redundant, Compact])입니다. MyISAM 테이블의 경우 Dynamic myisamchk -dvv Packed로보고하는 것에 해당합니다. InnoDB 테이블 형식은 Antelope 파일 형식을 사용하는 경우 Redundant 또는 Compact, Barracuda 파일 형식을 사용하는 경우 Compressed 또는 Dynamic입니다.

 

• TABLE_ROWS

 수입니다. MyISAM 같은 일부 스토리지 엔진은 정확한 개수를 저장합니다. InnoDB 같은 다른 스토리지 엔진의 경우이 값은 근사치이며 실제 값에서 40%에서 50%까지 다를  있습니다. 이러한 경우 SELECT COUNT (*) 사용하여 정확한 개수를 얻어야 합니다.

INFORMATION_SCHEMA 테이블의 경우 TABLE_ROWS NULL입니다.

InnoDB 테이블의 경우,  수는 SQL최적화에 사용되는 대략적인 추정치 일뿐입니다. (InnoDB 테이블이 분할된 경우에도 마찬가지입니다.)

 

• AVG_ROW_LENGTH

평균  길이입니다.

관련 정보는  섹션 끝에있는 참고를 확인합니다.

 

• DATA_LENGTH

MyISAM 경우 DATA_LENGTH 데이터 파일의 길이 (바이트)입니다.

InnoDB 경우 DATA_LENGTH 클러스터형 인덱스에 할당된 대략적인 공간(바이트)입니다. 특히, 클러스터된 인덱스 크기(페이지 단위) InnoDB 페이지 크기를 곱한 값입니다.

다른 스토리지 엔진에 대한 정보는  섹션 끝에있는 참고를 참조합니다.

 

• MAX_DATA_LENGTH

MyISAM 경우 MAX_DATA_LENGTH 데이터 파일의 최대 길이입니다. 사용된 데이터 포인터 크기를 고려하여 테이블에 저장할  있는  데이터 바이트 수입니다.

InnoDB에는 사용되지 않습니다. 다른 스토리지 엔진에 대한 정보는  섹션 끝에있는 참고를 참조합니다.

 

• INDEX_LENGTH

MyISAM 경우 INDEX_LENGTH 인덱스 파일의 길이(바이트)입니다.

InnoDB 경우 INDEX_LENGTH  클러스터형 인덱스에 할당된 대략적인 공간(바이트)입니다. 특히,  클러스터형 인덱스 크기(페이지 단위) InnoDB 페이지 크기를 곱한 값입니다.

다른 스토리지 엔진에 대한 정보는  섹션 끝에있는 참고를 참조합니다.

 

• DATA_FREE

할당되었지만 사용되지 않은 바이트 수입니다.

 

InnoDB 테이블은 테이블이 속한 테이블 스페이스의 여유 공간을 보고합니다. 공유 테이블 스페이스에 있는 테이블의 경우 공유 테이블 스페이스의 여유 공간입니다. 여러 테이블 스페이스를 사용하고 테이블에 자체 테이블 스페이스가 있는 경우 여유 공간은 해당 테이블에만 사용됩니다. 여유 공간은 완전 여유 범위의 바이트 수에서 안전한 여유공간을  값을 의미합니다. 여유 공간이 0으로 표시 되더라도  익스텐트를 할당할 필요가 없는한 행을 삽입   있습니다.

 

NDB 클러스터의 경우 DATA_FREE 디스크 데이터 테이블 또는 디스크 조각에 사용되지는 않지만 디스크에 할당된 공간을 표시합니다. (메모리  데이터 리소스 사용량은 DATA_LENGTH 열에 의해보고됩니다.)

 

파티션을 나눈 테이블의 경우,  값은 추정치일 뿐이며 절대적으로 정확하지 않을  있습니다. 이러한 경우  정보를 얻는 보다 정확한 방법은 다음 예에 표시된대로 INFORMATION_SCHEMA PARTITIONS 테이블을 쿼리하는 것입니다.

SELECT SUM(DATA_FREE)
    FROM  INFORMATION_SCHEMA.PARTITIONS
    WHERE TABLE_SCHEMA = 'mydb'
    AND   TABLE_NAME   = 'mytable';

 

• AUTO_INCREMENT

다음 AUTO_INCREMENT 값입니다.

 

• CREATE_TIME

테이블이 생성  날짜입니다.

 

• UPDATE_TIME

데이터 파일이 마지막으로 업데이트  시기입니다. 일부 스토리지 엔진의 경우  값은 NULL입니다. 예를 들어 InnoDB 시스템 테이블 스페이스에 여러 테이블을 저장하고 데이터 파일 타임 스탬프는 적용되지 않습니다. 개별 .ibd 파일에  InnoDB 테이블이 있는 테이블별 파일 모드에서도 변경 버퍼링은 데이터 파일에 대한 쓰기를 지연시킬  있으므로 파일 수정 시간은 마지막 삽입, 업데이트 또는 삭제 시간과 다릅니다. MyISAM 경우 데이터 파일 타임 스탬프가 사용됩니다. 그러나 Windows에서는 타임 스탬프가 업데이트로 업데이트되지 않으므로 값이 정확하지 않습니다.

 

UPDATE_TIME 분할되지 않은 InnoDB 테이블에서 수행된 마지막 UPDATE, INSERT 또는 DELETE 대한 타임 스탬프 값을 표시합니다. MVCC 경우 타임 스탬프 값은 마지막 업데이트 시간으로 간주되는 COMMIT 시간을 반영합니다. 타임 스탬프는 서버가 다시 시작되거나 테이블이 InnoDB 데이터 사전 캐시에서 제거   유지되지 않습니다.

 

UPDATE_TIME 열에는 분할된 InnoDB 테이블에 대한  정보도 표시됩니다.

 

• CHECK_TIME

테이블이 마지막으로 확인된 시간입니다. 이번에 모든 스토리지 엔진이 업데이트되는 것은 아닙니다.  경우 값은 항상 NULL입니다.

분할된 InnoDB 테이블의 경우 CHECK_TIME 항상 NULL입니다.

 

• TABLE_COLLATION

테이블 기본 데이터 정렬입니다. 출력은 테이블 기본 문자 세트를 명시적으로 나열하지 않지만 데이터 정렬 이름은 문자 세트 이름으로 시작합니다.

 

• CHECKSUM

라이브 체크섬 값입니다 (있는 경우).

 

• CREATE_OPTIONS

CREATE TABLE 함께 사용되는 추가 옵션입니다.

CREATE_OPTIONS 테이블이 분할된 경우 분할됨을 표시합니다.

CREATE_OPTIONS 테이블당 파일 테이블 스페이스에서 생성된 테이블에 대해 지정된 ENCRYPTION 절을 보여줍니다.

엄격 모드(strict mode) 비활성화된 테이블을 생성할  지정된  형식이 지원되지 않으면 스토리지 엔진의 기본  형식이 사용됩니다. 테이블의 실제  형식은 ROW_FORMAT컬럼에 보고됩니다. CREATE_OPTIONS CREATE TABLE 문에 지정된  형식을 보여줍니다.

테이블의 스토리지 엔진을 변경하면  스토리지 엔진에 적용할  없는 테이블 옵션이 테이블 정의에 유지되어 필요한 경우 이전에 정의된 옵션이 있는 테이블을 원래 스토리지 엔진으로 되돌릴  있습니다. CREATE_OPTIONS컬럼은 유지된 옵션을 표시   있습니다.

 

• TABLE_COMMENT

테이블을 생성할  사용된 코멘트(또는 MySQL 테이블 정보에 액세스  수없는 이유에 대한 정보) 입니다.

 

 참고사항

+ NDB 테이블의 경우  명령문의 출력은 BLOB컬럼이 고려되지 않는다는 점을 제외하고 AVG_ROW_LENGTH  DATA_LENGTH 열에 대한 적절한 값을 표시합니다.

+ NDB 테이블의 경우 DATA_LENGTH에는  메모리에만 저장된 데이터가 포함됩니다. MAX_DATA_LENGTH  DATA_FREE컬럼은 디스크 데이터에 적용됩니다.

+ NDB 클러스터 디스크 데이터 테이블의 경우 MAX_DATA_LENGTH 디스크 데이터 테이블 또는 조각의 디스크 부분에 할당된 공간을 보여줍니다. (메모리  데이터 리소스 사용량은 DATA_LENGTH 열에 의해 보고됩니다.)

+ MEMORY 테이블의 경우 DATA_LENGTH, MAX_DATA_LENGTH  INDEX_LENGTH 값은 할당된 실제 메모리 양에 가깝습니다. 할당 알고리즘은 할당 작업수를 줄이기 위해 메모리를 대량으로 예약합니다.

+ 뷰의 경우 TABLE_NAME  이름을 나타내고 TABLE_COMMENT VIEW 나타내는 것을 제외하고 모든 TABLES 열은 NULL입니다.

 

 

• SQL  명령어 조회

테이블 정보는 SHOW TABLE STATUS  SHOW TABLES 문에서도 사용할  있습니다. 다음 문은 동일합니다.

SELECT
    TABLE_NAME, ENGINE, VERSION, ROW_FORMAT, TABLE_ROWS, AVG_ROW_LENGTH,
    DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, AUTO_INCREMENT,
    CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, CHECKSUM,
    CREATE_OPTIONS, TABLE_COMMENT
  FROM INFORMATION_SCHEMA.TABLES
  WHERE table_schema = 'db_name'
  [AND table_name LIKE 'wild']

SHOW TABLE STATUS
  FROM db_name
  [LIKE 'wild']

 

다음 명령문은 동일합니다.

SELECT
  TABLE_NAME, TABLE_TYPE
  FROM INFORMATION_SCHEMA.TABLES
  WHERE table_schema = 'db_name'
  [AND table_name LIKE 'wild']

SHOW FULL TABLES
  FROM db_name
  [LIKE 'wild']

 

 

■ TABLE_CONSTRAINTS Table

TABLE_CONSTRAINTS 테이블은 제약 조건이있는 테이블을 설명합니다.

 컬럼의 정보는 다음과 같습니다.

 

• CONSTRAINT_CATALOG

제약 조건이 속한 카탈로그의 이름입니다.  값은 항상 def입니다.

 

• CONSTRAINT_SCHEMA

제약 조건이 속한 스키마 (데이터베이스) 이름입니다.

 

• TABLE_SCHEMA

테이블이 속한 스키마 (데이터베이스) 이름입니다.

 

• TABLE_NAME

테이블의 이름입니다.

 

• The CONSTRAINT_TYPE

제약 유형입니다. 값은 UNIQUE, PRIMARY KEY, FOREIGN KEY 또는 CHECK   있습니다. 이것은 CHAR (ENUM 아님) 컬럼입니다. CHECK 값은 MySQL CHECK 지원할 때까지 사용할  없습니다.

UNIQUE  PRIMARY KEY 정보는 Non_unique컬럼이 0일때 SHOW INDEX 출력에서 Key_name컬럼에서 얻은 정보와 거의 같습니다.

 

 

■ TABLE_PRIVILEGES Table

TABLE_PRIVILEGES 테이블은 테이블 권한에 대한 정보를 제공합니다. mysql.tables_priv 시스템 테이블에서 값을 가져옵니다.

 컬럼의 정보는 다음과 같습니다.

 

• GRANTEE

권한이 부여된 계정의 이름이며 'user_name'@'host_name'형식입니다.

 

• TABLE_CATALOG

테이블이 속한 카탈로그의 이름입니다.  값은 항상 def입니다.

 

• TABLE_SCHEMA

테이블이 속한 스키마 (데이터베이스) 이름입니다.

 

• TABLE_NAME

테이블의 이름입니다.

 

• PRIVILEGE_TYPE

부여된 권한입니다. 값은 테이블 수준에서 부여할  있는 모든 권한이   있습니다.  행에는 단일 권한이 나열되므로  부여자가 보유한 테이블 권한당 하나의 행이 있습니다.

 

• IS_GRANTABLE

사용자에게 GRANT OPTION 권한이 있으면 YES, 그렇지 않으면 NO. 출력에는 GRANT OPTION PRIVILEGE_TYPE='GRANT OPTION' 별도의 행으로 나열되지 않습니다.

 

 참고사항

TABLE_PRIVILEGES 비표준 INFORMATION_SCHEMA 테이블입니다.

 

 다음 문은 동일하지 않습니다.

SELECT ... FROM INFORMATION_SCHEMA.TABLE_PRIVILEGES

SHOW GRANTS ...

 

 

■ TRIGGERS Table

TRIGGERS 테이블은 트리거에 대한 정보를 제공합니다. 테이블의 트리거에 대한 정보를 보려면 테이블에 대한 TRIGGER 권한이 있어야합니다.

 컬럼의 정보는 다음과 같습니다.

 

• TRIGGER_CATALOG

트리거가 속한 카탈로그의 이름입니다.  값은 항상 def입니다.

 

• TRIGGER_SCHEMA

트리거가 속한 스키마 (데이터베이스) 이름입니다.

 

• TRIGGER_NAME

트리거의 이름입니다.

 

• EVENT_MANIPULATION

트리거 이벤트입니다. 트리거가 활성화되는 연관된 테이블에 대한 작업 유형입니다. 값은 INSERT(행이 삽입 ), DELETE(행이 삭제됨) 또는 UPDATE(행이 수정 )입니다.

 

• EVENT_OBJECT_CATALOG, EVENT_OBJECT_SCHEMA  EVENT_OBJECT_TABLE

모든 트리거는 정확히 하나의 테이블과 연관됩니다. 이러한 컬럼은  테이블이 발생하는 카탈로그  스키마 (데이터베이스) 테이블 이름을 각각 나타냅니다. EVENT_OBJECT_CATALOG 값은 항상 def입니다.

 

• ACTION_ORDER

동일한 EVENT_MANIPULATION  ACTION_TIMING 값을 가진 동일한 테이블의 트리거 목록 내에서 트리거 조치의 서수 위치입니다.

 

• ACTION_CONDITION

 값은 항상 NULL입니다.

 

• ACTION_STATEMENT

트리거 바디(내용); , 트리거가 활성화될  실행되는 명령문입니다.  텍스트는 UTF-8인코딩을 사용합니다.

 

• ACTION_ORIENTATION

 값은 항상 ROW입니다.

 

• ACTION_TIMING

트리거가 이벤트를 트리거하기 , 또는 후에 활성화되는지 여부. 값은 BEFORE 또는 AFTER입니다.

 

• ACTION_REFERENCE_OLD_TABLE

 값은 항상 NULL입니다.

 

• ACTION_REFERENCE_NEW_TABLE

 값은 항상 NULL입니다.

 

• ACTION_REFERENCE_OLD_ROW  ACTION_REFERENCE_NEW_ROW

각각 이전   컬럼 식별자입니다. ACTION_REFERENCE_OLD_ROW 값은 항상 OLD이고 ACTION_REFERENCE_NEW_ROW 값은 항상 NEW입니다.

 

• CREATED

트리거가 생성된 날짜  시간입니다. 이것은 MySQL 5.7.2 이상에서 생성  트리거의 경우 TIMESTAMP(2)(1/100  단위의 소수 부분 포함)이고 5.7.2 이전에 생성된 트리거의 경우 NULL입니다.

 

• SQL_MODE

트리거가 작성   적용되고 트리거가 실행되는 SQL 모드입니다.

 

• DEFINER

'user_name'@'host_name'형식의 DEFINER (종종 트리거를 만든 사용자) 이름이 지정된 계정입니다.

 

• CHARACTER_SET_CLIENT

트리거가 생성되었을  character_set_client 시스템 변수의 세션값입니다.

 

• COLLATION_CONNECTION

트리거가 생성되었을  collation_connection 시스템 변수의 세션값입니다.

 

• DATABASE_COLLATION

트리거가 연결된 데이터베이스의 데이터 정렬입니다.

 

 예제

mysql> SELECT * FROM INFORMATION_SCHEMA.TRIGGERS
       WHERE TRIGGER_SCHEMA='test' AND TRIGGER_NAME='ins_sum'\G
*************************** 1. row ***************************
           TRIGGER_CATALOG: def
            TRIGGER_SCHEMA: test
              TRIGGER_NAME: ins_sum
        EVENT_MANIPULATION: INSERT
      EVENT_OBJECT_CATALOG: def
       EVENT_OBJECT_SCHEMA: test
        EVENT_OBJECT_TABLE: account
              ACTION_ORDER: 1
          ACTION_CONDITION: NULL
          ACTION_STATEMENT: SET @sum = @sum + NEW.amount
        ACTION_ORIENTATION: ROW
             ACTION_TIMING: BEFORE
ACTION_REFERENCE_OLD_TABLE: NULL
ACTION_REFERENCE_NEW_TABLE: NULL
  ACTION_REFERENCE_OLD_ROW: OLD
  ACTION_REFERENCE_NEW_ROW: NEW
                   CREATED: 2018-08-08 10:10:12.61
                  SQL_MODE: ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,
                            NO_ZERO_IN_DATE,NO_ZERO_DATE,
                            ERROR_FOR_DIVISION_BY_ZERO,
                            NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
                   DEFINER: me@localhost
      CHARACTER_SET_CLIENT: utf8
      COLLATION_CONNECTION: utf8_general_ci
        DATABASE_COLLATION: latin1_swedish_ci

SHOW TRIGGERS 문에서도 트리거 정보를 사용할  있습니다.

 

 

■ USER_PRIVILEGES Table

USER_PRIVILEGES 테이블은 전역 권한에 대한 정보를 제공합니다. mysql.user 시스템 테이블에서 값을 가져옵니다.

 컬럼의 정보는 다음과 같습니다.

 

• GRANTEE

권한이 부여  계정의 이름이며 'user_name'@ 'host_name'형식입니다.

 

• TABLE_CATALOG

카탈로그의 이름입니다.  값은 항상 def입니다.

 

• PRIVILEGE_TYPE

부여  권한입니다. 값은 전역 수준에서 부여할  있는 모든 권한이   있습니다.  행은 단일 권한을 나열하므로  부여자가 보유한 전역 권한당 하나의 행이 있습니다.

 

• IS_GRANTABLE

사용자에게 GRANT OPTION 권한이 있으면 YES, 그렇지 않으면 NO. 출력에는 GRANT OPTION PRIVILEGE_TYPE='GRANT OPTION' 별도의 행으로 나열되지 않습니다.

 

  참고사항

USER_PRIVILEGES 비표준 INFORMATION_SCHEMA 테이블입니다.

 

 다음 문은 동일하지 않습니다.

SELECT ... FROM INFORMATION_SCHEMA.USER_PRIVILEGES

SHOW GRANTS ...

 

 

■ VIEWS Table

VIEWS 테이블은 데이터베이스의 뷰에 대한 정보를 제공합니다.  테이블에 액세스하려면 SHOW VIEW 권한이 있어야합니다.

 컬럼의 정보는 다음과 같습니다.

 

• TABLE_CATALOG

(VIEW) 속한 카탈로그의 이름입니다.  값은 항상 def입니다.

 

• TABLE_SCHEMA

(VIEW) 속한 스키마 (데이터베이스) 이름입니다.

 

• TABLE_NAME

(VIEW) 이름입니다.

 

• VIEW_DEFINITION

뷰의 정의를 제공하는 SELECT 문입니다.  컬럼에는 SHOW CREATE VIEW 생성하는 Create Table 컬럼에 표시되는 내용이 대부분 있습니다. SELECT 전에 단어를 건너 뛰고 WITH CHECK OPTION 단어를 건너 뜁니다.

원본 명령문이 다음과 같다고 가정합니다.

 

 

그러면  정의는 다음과 같습니다.

SELECT s2,s1 FROM t WHERE s1 > 5 ORDER BY s1

 

• CHECK_OPTION

CHECK_OPTION 속성의 값입니다. 값은 NONE, CASCADE 또는 LOCAL  하나입니다.

 

• IS_UPDATABLE

MySQL CREATE VIEW 시간에  업데이트 가능성 플래그라는 플래그를 설정합니다. UPDATE  DELETE( 유사한 작업) 뷰에 대해 적법한 경우 플래그는 YES (true) 설정됩니다. 그렇지 않으면 플래그가 NO (거짓) 설정됩니다.

VIEWS 테이블의 IS_UPDATABLE컬럼은  플래그의 상태를 표시합니다.

 

뷰를 업데이트   없는 경우 UPDATE, DELETE  INSERT 같은 문은 실행이 거부됩니다.(뷰가 업데이트 가능하더라도 삽입이 불가능할  있습니다.)

 

뷰가 하나 이상의 다른 뷰에 의존하고 이러한 기본   하나가 업데이트  경우 IS_UPDATABLE 플래그는 신뢰할 어려울  있습니다.

IS_UPDATABLE 값에 관계없이 서버는 뷰의 업데이트 가능성을 추적하고 업데이트할  없는 뷰에 대한 데이터 변경 작업을 올바르게 거부합니다.

뷰에 대한 IS_UPDATABLE 값이 기본 뷰의 변경으로 인해 부정확해진 경우 뷰를 삭제하고 다시 생성하여 값을 업데이트   있습니다.

 

• DEFINER

보기를 만든 사용자의 계정 ( 'user_name'@ 'host_name'형식)입니다.

 

• SECURITY_TYPE

보기 SQL SECURITY 특성. 값은 DEFINER 또는 INVOKER  하나입니다.

 

• CHARACTER_SET_CLIENT

뷰가 생성되었을  character_set_client 시스템 변수의 세션 값입니다.

 

• COLLATION_CONNECTION

뷰가 작성되었을  collation_connection 시스템 변수의 세션 값입니다.

 

 참고사항

MySQL 지원할 SQL구문 유형을 서버에 알리기 위해 다른 sql_mode 설정을 허용합니다. 예를 들어 ANSI SQL 모드를 사용하여 MySQL 쿼리에서 표준 SQL연결 연산자인 이중 막대(||) 올바르게 해석하도록   있습니다.

그런 다음 항목을 연결하는 뷰를 만들면 sql_mode 설정을 ANSI 다른 값으로 변경하면 뷰가 유효하지 않게   있습니다. 그러나 이것은 사실이 아닙니다.  정의를 어떻게 작성하든 MySQL 항상 동일한 방식으로 표준 형식으로 저장합니다.

다음은 서버가 이중 막대 연결 연산자를 CONCAT() 함수로 변경하는 방법을 보여주는 예입니다.

mysql> SET sql_mode = 'ANSI';
Query OK, 0 rows affected (0.00 sec)

mysql> CREATE VIEW test.v AS SELECT 'a' || 'b' as col1;
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT VIEW_DEFINITION FROM INFORMATION_SCHEMA.VIEWS
       WHERE TABLE_SCHEMA = 'test' AND TABLE_NAME = 'v';
+----------------------------------+
| VIEW_DEFINITION                  |
+----------------------------------+
| select concat('a','b') AS `col1` |
+----------------------------------+
1 row in set (0.00 sec)

 정의를 표준 형식으로 저장하는 이점은 나중에 sql_mode 값을 변경해도 뷰의 결과에 영향을주지 않는다는 것입니다. 그러나 추가 결과는 SELECT 이전의 주석이 서버에 의해 정의에서 제거된다는 것입니다.

댓글(0)

Designed by JB FACTORY