programing

Mysql/Maria 고유 키 표현

shortcode 2022. 10. 26. 22:58
반응형

Mysql/Maria 고유 키 표현

mysql/mariadb 데이터베이스에 키가 어떻게 저장되어 있는지 알고 싶습니다.information_schema.columns에 저장되어 있는 타입은 PRI, MUL 및 UNI로 각각 프라이머리 키, 키, 유니크 키를 의미합니다.

하지만 꼭 어렵지만은 않아요.

MariaDB [test]> CREATE TABLE test_table(leftkey int unsigned, rightkey int unsigned, unique key(leftkey, rightkey));

MariaDB [test]> DESC test_table;
+----------+------------------+------+-----+---------+-------+
| Field    | Type             | Null | Key | Default | Extra |
+----------+------------------+------+-----+---------+-------+
| leftkey  | int(10) unsigned | YES  | MUL | NULL    |       |
| rightkey | int(10) unsigned | YES  |     | NULL    |       |
+----------+------------------+------+-----+---------+-------+

두 가지 질문이 있습니다.

1) 그 키 타입이 Unique임을 검출하려면 어떻게 해야 합니까?Descript 명령어는 유형이 UNI가 아닌 MUL(단순 키)임을 나타냅니다.

2) 키 쌍(예: 왼쪽 키와 오른쪽 키)은 어디에 저장됩니까?

DESCRIBE는 불명확한 정보를 제공할 수 있으므로 신경 쓰지 마십시오.

그냥 사용하다SHOW CREATE TABLE테이블을 재작성하는 SQL 구문을 정확하게 보여줍니다.그러면 존재하는 키와 유형을 정확하게 알 수 있습니다.

mysql> show create table test_table\G
*************************** 1. row ***************************
       Table: test_table
Create Table: CREATE TABLE `test_table` (
  `leftkey` int(10) unsigned DEFAULT NULL,
  `rightkey` int(10) unsigned DEFAULT NULL,
  UNIQUE KEY `leftkey` (`leftkey`,`rightkey`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1

문의할 수도 있습니다.INFORMATION_SCHEMA.STATISTICS더 정확한 정보를 얻기 위해.

mysql> select * from information_schema.statistics where table_name='test_table'\G
*************************** 1. row ***************************
TABLE_CATALOG: def
 TABLE_SCHEMA: test
   TABLE_NAME: test_table
   NON_UNIQUE: 0
 INDEX_SCHEMA: test
   INDEX_NAME: leftkey
 SEQ_IN_INDEX: 1
  COLUMN_NAME: leftkey
    COLLATION: A
  CARDINALITY: 0
     SUB_PART: NULL
       PACKED: NULL
     NULLABLE: YES
   INDEX_TYPE: BTREE
      COMMENT: 
INDEX_COMMENT: 
*************************** 2. row ***************************
TABLE_CATALOG: def
 TABLE_SCHEMA: test
   TABLE_NAME: test_table
   NON_UNIQUE: 0
 INDEX_SCHEMA: test
   INDEX_NAME: leftkey
 SEQ_IN_INDEX: 2
  COLUMN_NAME: rightkey
    COLLATION: A
  CARDINALITY: 0
     SUB_PART: NULL
       PACKED: NULL
     NULLABLE: YES
   INDEX_TYPE: BTREE
      COMMENT: 
INDEX_COMMENT: 

또는,INFORMATION_SCHEMA.KEY_COLUMN_USAGE테이블에는 약간 다른 정보가 있습니다.

mysql> select * from information_schema.key_column_usage where table_name = 'test_table'\G
*************************** 1. row ***************************
           CONSTRAINT_CATALOG: def
            CONSTRAINT_SCHEMA: test
              CONSTRAINT_NAME: leftkey
                TABLE_CATALOG: def
                 TABLE_SCHEMA: test
                   TABLE_NAME: test_table
                  COLUMN_NAME: leftkey
             ORDINAL_POSITION: 1
POSITION_IN_UNIQUE_CONSTRAINT: NULL
      REFERENCED_TABLE_SCHEMA: NULL
        REFERENCED_TABLE_NAME: NULL
       REFERENCED_COLUMN_NAME: NULL
*************************** 2. row ***************************
           CONSTRAINT_CATALOG: def
            CONSTRAINT_SCHEMA: test
              CONSTRAINT_NAME: leftkey
                TABLE_CATALOG: def
                 TABLE_SCHEMA: test
                   TABLE_NAME: test_table
                  COLUMN_NAME: rightkey
             ORDINAL_POSITION: 2
POSITION_IN_UNIQUE_CONSTRAINT: NULL
      REFERENCED_TABLE_SCHEMA: NULL
        REFERENCED_TABLE_NAME: NULL
       REFERENCED_COLUMN_NAME: NULL

information_schema.columns에 제약사항이 되는 키가 아닌 컬럼을 나타냅니다.열은 구속조건에 사용되므로 다른 열을 사용해야 합니다.information_schema표를 참조해 주세요.

다음 조회를 사용하여 제약 조건에 대한 자세한 정보를 얻을 수 있습니다.

SELECT *
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS TC
INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE TK
 ON TC.CONSTRAINT_SCHEMA = TK.CONSTRAINT_SCHEMA
 AND TC.TABLE_SCHEMA = TK.TABLE_SCHEMA
 AND TC.TABLE_NAME   = TK.TABLE_NAME
 AND TC.CONSTRAINT_NAME = TK.CONSTRAINT_NAME

언급URL : https://stackoverflow.com/questions/25516387/mysql-maria-unique-keys-representation

반응형