SQL Unique
SQL UNIQUE: 중복을 허용하지 않는 제약 조건
SQL UNIQUE 제약 조건은 열에 중복된 값이 저장되지 않도록 제한하는 제약 조건입니다. UNIQUE 제약 조건이 설정된 열은 각 행에서 고유한 값을 가져야 하며, 같은 값이 반복될 수 없습니다. 하나의 테이블에 여러 개의 UNIQUE 열을 설정할 수 있으며, PRIMARY KEY와는 다르게 NULL 값을 허용할 수 있습니다.
1. UNIQUE 제약 조건 기본 문법
CREATE TABLE 테이블_이름 (
열_이름 데이터_타입 UNIQUE
);
- 열_이름: 중복을 허용하지 않을 열의 이름.
- 데이터_타입: 해당 열에 저장될 데이터 유형.
- UNIQUE: 이 열의 값은 중복되지 않아야 함.
2. UNIQUE 제약 조건 예제
2.1 테이블 생성 시 UNIQUE 제약 조건 추가
예제: employees
테이블에서 email
열에 UNIQUE 제약 조건 설정
CREATE TABLE employees (
employee_id INT,
name VARCHAR(100),
email VARCHAR(100) UNIQUE -- 중복된 이메일 허용하지 않음
);
이 명령은 employees 테이블의 email 열에 UNIQUE 제약 조건을 추가하여, 중복된 이메일을 입력할 수 없도록 설정합니다.
2.2 테이블 생성 후 UNIQUE 제약 조건 추가 (ALTER TABLE)
기존 테이블에 UNIQUE 제약 조건을 추가할 수도 있습니다. ALTER TABLE 명령을 사용하여 열에 제약 조건을 추가합니다.
문법
ALTER TABLE 테이블_이름
ADD CONSTRAINT 제약조건_이름 UNIQUE (열_이름);
- 제약조건_이름: UNIQUE 제약 조건의 이름.
- 열_이름: UNIQUE 제약 조건을 적용할 열의 이름.
예제: employees
테이블의 email
열에 UNIQUE 제약 조건 추가
ALTER TABLE employees
ADD CONSTRAINT unique_email UNIQUE (email);
이 명령은 employees 테이블의 email 열에 unique_email이라는 UNIQUE 제약 조건을 추가합니다. 이제 email 열은 중복된 값을 허용하지 않게 됩니다.
3. UNIQUE 제약 조건 제거
기존 테이블에서 UNIQUE 제약 조건을 제거할 수 있습니다. ALTER TABLE 명령을 사용하여 제거합니다.
문법
ALTER TABLE 테이블_이름
DROP CONSTRAINT 제약조건_이름;
- 제약조건_이름: 제거할 UNIQUE 제약 조건의 이름.
예제: employees
테이블에서 email
열의 UNIQUE 제약 조건 제거
ALTER TABLE employees
DROP CONSTRAINT unique_email;
이 명령은 employees 테이블의 unique_email 제약 조건을 제거하여 email 열에 중복된 값을 허용할 수 있게 합니다.
4. 다중 열에 UNIQUE 제약 조건 설정 (복합 UNIQUE 제약 조건)
여러 열을 조합하여 복합 UNIQUE 제약 조건을 설정할 수 있습니다. 이 경우 여러 열의 값 조합이 고유해야 하며, 개별 열이 중복을 허용할 수 있습니다.
문법
CREATE TABLE 테이블_이름 (
열_이름1 데이터_타입,
열_이름2 데이터_타입,
UNIQUE (열_이름1, 열_이름2)
);
예제: employees
테이블에서 first_name
과 last_name
의 조합에 UNIQUE 제약 조건 설정
CREATE TABLE employees (
employee_id INT,
first_name VARCHAR(50),
last_name VARCHAR(50),
UNIQUE (first_name, last_name) -- 이름과 성의 조합이 중복되지 않도록 설정
);
이 명령은 first_name과 last_name 열의 조합이 중복되지 않도록 설정합니다. 즉, 이름과 성의 같은 조합은 여러 번 입력될 수 없습니다.
5. PRIMARY KEY와 UNIQUE의 차이
- PRIMARY KEY: 테이블에서 고유한 값을 가지며, NULL 값을 허용하지 않습니다. 하나의 테이블에 오직 하나의 PRIMARY KEY만 설정할 수 있습니다.
- UNIQUE: 고유한 값을 가지지만, NULL 값을 허용할 수 있습니다. 한 테이블에 여러 개의 UNIQUE 제약 조건을 설정할 수 있습니다.
예제: PRIMARY KEY와 UNIQUE 차이
CREATE TABLE employees (
employee_id INT PRIMARY KEY, -- PRIMARY KEY, 고유하고 NULL 허용하지 않음
email VARCHAR(100) UNIQUE -- UNIQUE, 고유하지만 NULL 허용 가능
);
이 예제에서 employee_id는 PRIMARY KEY로 설정되어 NULL을 허용하지 않으며, 고유한 값을 가져야 합니다. 반면, email은 UNIQUE 제약 조건이 적용되어 중복은 허용되지 않지만 NULL 값은 허용할 수 있습니다.
6. 실전 예제
예제 1: 직원 테이블 생성 시 UNIQUE 설정
CREATE TABLE employees (
employee_id INT PRIMARY KEY,
name VARCHAR(100),
email VARCHAR(100) UNIQUE, -- 중복된 이메일 허용하지 않음
phone_number VARCHAR(15)
);
이 예제는 employees 테이블에서 email 열에 UNIQUE 제약 조건을 설정하여 중복된 이메일이 입력되지 않도록 설정합니다.
예제 2: 기존 테이블에 UNIQUE 제약 조건 추가
ALTER TABLE employees
ADD CONSTRAINT unique_phone_number UNIQUE (phone_number);
이 명령은 employees 테이블의 phone_number 열에 UNIQUE 제약 조건을 추가하여 중복된 전화번호를 허용하지 않도록 합니다.
7. 요약
- UNIQUE 제약 조건은 열에 중복된 값이 저장되지 않도록 제한합니다.
- 테이블 생성 시나 ALTER TABLE 명령을 통해 기존 테이블에 UNIQUE 제약 조건을 추가할 수 있습니다.
- 여러 열을 조합하여 복합 UNIQUE 제약 조건을 설정할 수 있으며, 이는 여러 열의 값이 조합하여 고유한 값을 가져야 함을 의미합니다.
- PRIMARY KEY는 NULL 값을 허용하지 않지만, UNIQUE는 NULL 값을 허용할 수 있습니다.
UNIQUE 제약 조건은 데이터베이스에서 중복 데이터를 방지하고, 데이터 무결성을 유지하는 데 중요한 역할을 합니다. 각 열이나 열의 조합에서 중복되지 않도록 데이터를 관리할 때 유용합니다.