Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL에서 여러 열로 구성된 UNIQUE 인덱스를 만드는 방법

여러 열(멀티 컬럼)로 구성된 UNIQUE 인덱스를 생성하려면 CREATE UNIQUE INDEX 문에서 인덱스 이름을 지정하고, 그 뒤에 두 개 이상의 열을 나열하면 됩니다. 이렇게 하면 해당 열들의 조합 전체가 중복되지 않도록 데이터베이스가 보장합니다.

멀티 컬럼 UNIQUE 인덱스 생성 예제

다음 예제는 'employee' 테이블의 'empid', 'first_name', 'last_name' 세 개의 열에 'id_fname_lname'이라는 이름의 멀티 컬럼 UNIQUE 인덱스를 생성합니다.

mysql> Create UNIQUE INDEX id_fname_lname on employee(empid,first_name,last_name);
Query OK, 0 rows affected (0.41 sec)
Records: 0 Duplicates: 0 Warnings: 0

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

위 쿼리의 결과 집합을 보면 테이블에 복수 열로 구성된 인덱스가 정의되어 있음을 확인할 수 있습니다. 'empid' 열의 Key 값이 'MUL'로 표시되는 것도 인덱스가 여러 열에 걸쳐 적용되었음을 나타냅니다.

인덱스 상세 정보 확인하기

생성된 인덱스에 대한 자세한 정보를 확인하려면 다음과 같이 SHOW INDEX 문을 실행하면 됩니다.

mysql> Show index from employee\G
*************************** 1. row ***************************
Table: employee
Non_unique: 0
Key_name: id_fname_lname
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: id_fname_lname
Seq_in_index: 2
Column_name: first_name
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: id_fname_lname
Seq_in_index: 3
Column_name: last_name
Collation: A
Cardinality: 0
Sub_part: NULL
Packed: NULL
Null: YES
Index_type: BTREE
Comment:
Index_comment:
3 rows in set (0.00 sec)

결과 집합에서 주목할 점은 세 행 모두 'Key_name' 값이 동일한 'id_fname_lname'이라는 것입니다. 이는 테이블의 세 열 각각에 별도의 인덱스를 만든 것이 아니라, 모든 열을 포함하는 하나의 멀티 컬럼 인덱스를 생성했기 때문입니다. 또한 'Seq_in_index' 값을 통해 각 열이 인덱스 내에서 어떤 순서로 배치되어 있는지(1, 2, 3번째) 알 수 있으며, 'Non_unique' 값이 0인 것은 이 인덱스가 UNIQUE 제약 조건을 가진다는 의미입니다.