Computer >> 컴퓨터 >  >> 프로그램 작성 >> MySQL

동일한 열에 여러 번 UNIQUE 제약 조건을 추가하면 어떻게 됩니까?


동일한 열에 UNIQUE 제약 조건을 여러 번 추가하면 MySQL은 UNIQUE 제약 조건을 추가한 횟수만큼 해당 열에 인덱스를 생성합니다.

예시

'empid' 열에 UNIQUE 제약 조건이 있는 'employee' 테이블이 있다고 가정합니다. 다음 쿼리에서 확인할 수 있습니다 -

mysql> Describe employee;
+------------+-------------+------+-----+---------+-------+
| Field      | Type        | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| empid      | int(11)     | YES  | UNI | NULL    |       |
| first_name | varchar(20) | YES  |     | NULL    |       |
| last_name  | varchar(20) | YES  |     | NULL    |       |
+------------+-------------+------+-----+---------+-------+
3 rows in set (0.12 sec)

이제 SHOW INDEX 쿼리를 실행하면 'empid' 열에 생성된 하나의 인덱스만 인덱스 이름을 제공합니다.

mysql> Show index from employee\G;
*************************** 1. row ***************************
        Table: employee
   Non_unique: 0
     Key_name: empid
 Seq_in_index: 1
  Column_name: empid
    Collation: A
  Cardinality: 0
     Sub_part: NULL
       Packed: NULL
         Null: YES
   Index_type: BTREE
      Comment:
Index_comment:
1 row in set (0.00 sec)

다음 쿼리의 도움으로 동일한 열 'empid' −

에 UNIQUE 제약 조건을 하나 더 추가했습니다.
mysql> Alter table employee ADD UNIQUE(empid);
Query OK, 0 rows affected (0.21 sec)
Records: 0 Duplicates: 0 Warnings: 0

이제 SHOW INDEX 쿼리를 실행하면 'empid' 열에 생성된 2개의 인덱스 'empid'와 'empid_2'인 인덱스 이름을 제공합니다.

mysql> Show index from employee12\G;
*************************** 1. row ***************************
        Table: employee
   Non_unique: 0
     Key_name: empid
 Seq_in_index: 1
  Column_name: empid
    Collation: A
  Cardinality: 0
     Sub_part: NULL
       Packed: NULL
         Null: YES
   Index_type: BTREE
      Comment:
Index_comment:
*************************** 2. row ***************************
        Table: employee
   Non_unique: 0
     Key_name: empid_2
 Seq_in_index: 1
  Column_name: empid
    Collation: A
  Cardinality: 0
     Sub_part: NULL
       Packed: NULL
         Null: YES
   Index_type: BTREE
      Comment:
Index_comment:
2 rows in set (0.00 sec)

다음 쿼리의 도움으로 동일한 열 'empid' −

에 UNIQUE 제약 조건을 하나 더 추가했습니다.
mysql> Alter table employee ADD UNIQUE(empid);
Query OK, 0 rows affected (0.21 sec)
Records: 0 Duplicates: 0 Warnings: 0

이제 SHOW INDEX 쿼리를 실행하면 'empid' 열에 생성된 3개의 인덱스 'empid'와 'empid_2', 'empid_3'인 인덱스 이름을 제공합니다.

mysql> Alter table employee ADD UNIQUE(empid);
Query OK, 0 rows affected (0.30 sec)
Records: 0 Duplicates: 0 Warnings: 0

mysql> Show index from employee\G;
*************************** 1. row ***************************
        Table: employee
   Non_unique: 0
     Key_name: empid
 Seq_in_index: 1
  Column_name: empid
    Collation: A
  Cardinality: 0
     Sub_part: NULL
       Packed: NULL
         Null: YES
   Index_type: BTREE
      Comment:
Index_comment:
*************************** 2. row ***************************
        Table: employee
   Non_unique: 0
     Key_name: empid_2
 Seq_in_index: 1
  Column_name: empid
    Collation: A
  Cardinality: 0
     Sub_part: NULL
       Packed: NULL
         Null: YES
   Index_type: BTREE
      Comment:
Index_comment:
*************************** 3. row ***************************
        Table: employee
   Non_unique: 0
     Key_name: empid_3
 Seq_in_index: 1
  Column_name: empid
    Collation: A
  Cardinality: 0
     Sub_part: NULL
       Packed: NULL
         Null: YES
   Index_type: BTREE
      Comment:
Index_comment:
3 rows in set (0.00 sec)

이런 의미에서 MySQL은 해당 열에 UNIQUE 제약 조건을 추가한 횟수만큼 해당 열에 고유 인덱스를 생성한다고 말할 수 있습니다.