PRIMARY KEY constraint - 기본 키 제약 조건
PRIMARY KEY constraint - 기본 키 제약 조건
우리는 종종 우리 테이블에 있는 모든 줄들이 고유해야 할 필요가 있습니다.
중첩 정보를 가지고 있는 줄이 없어야 한다는 의미이다.
예를 들어, 회의 참가자에 대한 정보를 저장하고 싶다고 가정합니다.
이 때 필요한 정보 : 이름, 이메일, 생년월일, 도시
우리는 누구도 확실히 두 번 등록하지 않게 만들고 싶습니다.
이 경우, 각 참가자들이 고유 할 수 있는 데이터의 조합을 찾아야만 합니다.
아마 몇몇 사람들은 같은 이름을 가지고 있겠지만, 확실히 똑같은 개인 이메일을 공유하지 않습니다.
그러므로, 우리는 이 필드 (이메일)을 고유한 키 처럼 사용할 수 있는데, 이는 동일한 것을 생성하는 것을 방지합니다.
이러한 고유성을 지닌 키를 보통 primary key 라고 부릅니다.
PRIMARY KEY constraint (PK) - 기본 키 제약
PRIMARY KEY 제약은 값이 포함된 열 집합을 지정하는데,
해당 값은 어떠한 테이블 레코드에서도 식별이 가능하게 돕습니다.
이 제약은 테이블은 만드는 과정에서 지정 될 수 있습니다.
chefs
이름을 가진 테이블을 만들고,
해당 테이블에
chef_id INT
first_name VARCHAR(20)
last_name VARCHAR(20)
컬럼을 포함시켜 봅시다.
우리는 모든 셰프 (chef
) 에 개별적인 식별자를 가진다고 가정하기에,
chef_id
컬럼을 primary key로 만들 것 입니다.
CREATE TABLE chefs (
chef_id INT PRIMARY KEY,
first_name VARCHAR(20),
last_name VARCHAR(20)
);
PRIMARY KEY 제약 조건이 의미하는 바는,
chef_id
컬럼이 무조건 각각의 셰프들에 대해서 고유한 값을 담아야 한다는 것 입니다.
같은 chef_id
를 가지고 있는 두 셰프는 불가능합니다.
기본 키 (primary key) 는 테이블의 각 줄을 식별하기 때문에,
무조건 고유성을 띄어야 하며, null 이 될 수 없습니다.
다른 중요한 점은, 테이블은 단 하나의 기본 키만 가질 수 있다는 것 입니다.
하지만, 그 안에 다중 컬럼을 포함시키는 것이 허용됩니다.
의미
:
하나의 컬럼만 기본 키로 지정시키는 것이 아니라, 여러 개의 컬럼을 묶어 하나의 기본 키로 만들 수 있다.
예를 들어, department_id
, employee_id
, name
컬럼을 가진 테이블을 고려 해 봅시다.
우리는 두 직원이 다른 부서를 넘어, 동일한 식별자를 가질 수도 있다고 가정 할 수 있습니다.
그러나, 하나의 부서에서 동일한 ID를 가지고 있는 몇 명의 직원을 가지는 것은 불가능합니다.
따라서, (42, 15, 'Ann Brown)
, (43, 15, 'Bob Freud')
을 테이블에서 가질 수 있습니다.
하지만, (42, 15, 'John Smith
)`튜플은 해당 테이블에 추가할 수 없는데,
이는 이미 Ann Brown 과 ID 42 가 이미 있기 때문입니다.
이 경우에서, 우리는 employees 테이블을 만들 때, 여러 열에 명명된 PRIMARY KEY 제약을 정의할 수 있습니다.
CREATE TABLE employees (
department_id INT NOT NULL,
employee_id INT NOT NULL,
name VARCHAR(50) NOT NULL,
CONSTRAINT pk_employee PRIMARY KEY (department_id, employee_id)
);
위의 쿼리 구문은 한 컬럼에만 제약이 걸린 PRIMARY KEY 를 만들때도 사용 할 수 있습니다.
Add PRIMARY KEY to an existing table
기본키가 없는 테이블을 가지고 있다면,
우리는 ALTER TABLE
문법을 사용 하여 이름 지어진 기본 키를 추가할 수 있습니다.
countries 라고 이름지어진 테이블을 가지고 있다고 가정해 봅시다. :
CREATE TABLE countries (
country_name VARCHAR(40) NOT NULL UNIQUE,
population INT CHECK ( population > 0 ),
area REAL NOT NULL
);
country_name
컬럼을 우리의 기본 키로 만들고자 합니다.
country_name
컬럼에 이름 없는 PRIMARY KEY를 추가하기 위해서,
ALTER TABLE ADD PRIMARY KEY
문법을 사용합니다 :
ALTER TABLE contries
ADD PRIMARY KEY (country_name);
country_name
컬럼은 이미 고유하며, null 값을 담을 수 없습니다.
따라서, countries
테이블의 기본 키로 만들기에 안전합니다.
비워지지 않은 테이블에 제약을 추가 할 때 조심하세요. :
기본 키가 될 컬럼에 이미 동일한 값이나, null 값을 가지고 있다면 에러가 납니다.
이미 존재하는 테이블에서 이름이 있는 PRIMARY KEY 제약을 추가 할 때에도
ALTER TABLE ADD CONSTRAINT
구문을 사용할 수 있습니다.
한 번 students
테이블의 다중 컬럼으로 PRIMARY KEY의 제약을 정의 해 봅시다.
이 테이블은
name VARCHAR(60)
,birth_date DATE
,department VARCHAR(40)
컬럼을 가지고 있습니다.
밑의 쿼리는 기본 키 pk_student를 추가합니다.
이 기본 키는 두 가지 컬럼을 가지는데 : name
, birth_date
ALTER TABLE students
ADD CONSTRAINT pk student PRIMARY KEY (name, birth_date);
Drop PRIMARY KEY - 기본 키 없애기
우리가 해야 할 필요가 있는 또 다른 것은 테이블로부터 기본 키를 삭제하는 것 입니다.
students 테이블의 pk_student
기본 키를 삭제 해 봅시다.
PRIMARY KEY를 삭제하기 위해서, ALTER TABLE DROP PRIMARY KEY
를 사용합니다.
ALTER TABLE students
DROP PRIMARY KEY;
테이블은 단 하나의 기본 키만 가질 수 있기 때문에, 제약 (constraint) 이름을 표기 할 필요는 없습니다.
Conclusion - 결론
지금 당신은 테이블의 모든 줄이 고유 할 필요가 있을 때 어떤 행동을 해야 하는지 알며,
SQL에서 기본 키를 정의하는 법을 알며,
기존 테이블에 기본 키를 추가하고, 삭제하는 방법을 압니다.
연습 해 봅시다!