Hyperskill - 컴퓨터 CS 및 영어 독해/Introducing to SQL

PRIMARY KEY constraint - 기본 키 제약 조건

코딩크리처 2024. 4. 20. 21:39

PRIMARY KEY constraint - 기본 키 제약 조건


hyperskill 원문

우리는 종종 우리 테이블에 있는 모든 줄들이 고유해야 할 필요가 있습니다.

중첩 정보를 가지고 있는 줄이 없어야 한다는 의미이다.

예를 들어, 회의 참가자에 대한 정보를 저장하고 싶다고 가정합니다.

이 때 필요한 정보 : 이름, 이메일, 생년월일, 도시

우리는 누구도 확실히 두 번 등록하지 않게 만들고 싶습니다.

이 경우, 각 참가자들이 고유 할 수 있는 데이터의 조합을 찾아야만 합니다.

아마 몇몇 사람들은 같은 이름을 가지고 있겠지만, 확실히 똑같은 개인 이메일을 공유하지 않습니다.

그러므로, 우리는 이 필드 (이메일)을 고유한 키 처럼 사용할 수 있는데, 이는 동일한 것을 생성하는 것을 방지합니다.

이러한 고유성을 지닌 키를 보통 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에서 기본 키를 정의하는 법을 알며,

기존 테이블에 기본 키를 추가하고, 삭제하는 방법을 압니다.

연습 해 봅시다!