sitelink1 | |
---|---|
sitelink2 | |
extra_vars5 | |
extra_vars6 |
MariaDB에서 테이블 내의 두 개의 컬럼을 유니크하게 만들려면 복합(다중) 유니크 인덱스를 사용해야 합니다.
이는 두 개의 컬럼의 조합이 유일하도록 강제하는 제약 조건을 설정합니다.
### 예제
예를 들어, `orders`라는 테이블이 있고, `customer_id`와 `order_id` 컬럼의 조합이 유니크해야 한다고 가정하겠습니다.
#### 1. 테이블 생성 시 유니크 인덱스 추가
```sql
CREATE TABLE orders (
order_id INT,
customer_id INT,
product_name VARCHAR(100),
quantity INT,
PRIMARY KEY (order_id),
UNIQUE KEY unique_customer_order (customer_id, order_id)
);
```
#### 2. 기존 테이블에 유니크 인덱스 추가
만약 이미 테이블이 존재하는 경우, 유니크 인덱스를 추가하려면 `ALTER TABLE` 명령어를 사용합니다.
```sql
ALTER TABLE orders
ADD CONSTRAINT unique_customer_order UNIQUE (customer_id, order_id);
```
### 설명
1. **CREATE TABLE**:
- `UNIQUE KEY unique_customer_order (customer_id, order_id)`: 테이블을 생성할 때 `customer_id`와 `order_id`의 조합이 유일하도록 유니크 키를 설정합니다.
2. **ALTER TABLE**:
- `ADD CONSTRAINT unique_customer_order UNIQUE (customer_id, order_id)`: 이미 존재하는 테이블에 대해 `customer_id`와 `order_id`의 조합이 유일하도록 유니크 제약 조건을 추가합니다.
이러한 설정을 통해, `customer_id`와 `order_id`의 조합이 중복되지 않도록 보장할 수 있습니다. 예를 들어, 동일한 `customer_id`와 `order_id`의 조합으로 두 개의 행을 삽입하려고 하면, MariaDB는 이를 허용하지 않고 오류를 반환합니다.
### 예제 실행
1. **테이블 생성과 유니크 인덱스 설정**:
```sql
CREATE TABLE orders (
order_id INT,
customer_id INT,
product_name VARCHAR(100),
quantity INT,
PRIMARY KEY (order_id),
UNIQUE KEY unique_customer_order (customer_id, order_id)
);
```
2. **데이터 삽입 시도**:
```sql
INSERT INTO orders (order_id, customer_id, product_name, quantity) VALUES (1, 101, 'Apple', 5);
INSERT INTO orders (order_id, customer_id, product_name, quantity) VALUES (2, 101, 'Banana', 10); -- 성공
INSERT INTO orders (order_id, customer_id, product_name, quantity) VALUES (3, 101, 'Apple', 5); -- 성공
INSERT INTO orders (order_id, customer_id, product_name, quantity) VALUES (4, 101, 'Apple', 5); -- 오류 발생 (customer_id와 order_id의 조합이 중복)
```
이렇게 하면 `customer_id`와 `order_id`의 조합이 유니크하게 유지되도록 보장할 수 있습니다.