Channi Studies

[MySQL] Day 9. PRIMARY KEYS constraint 본문

SQL

[MySQL] Day 9. PRIMARY KEYS constraint

Chan Lee 2025. 4. 6. 13:57

Today I learned PRIMARY KEYS constraint in MySQL.

Primary key constraint can be applied to a column where each value in that column must both be unique and not null.

It's typically used as a unique identifier. 

 

 

PRIMARY KEYS constraint가 유용할만한 예시를 하나 들어보겠습니다. 

대한민국의 출생신고가 된 모든 사람들은 각기 다른 주민등록번호를 가지고 있습니다. 

편의를 위해 우리가 대한민국의 모든 사람들의 이름과 주민번호 데이터베이스에 대한 접근 권한이 존재한다고 가정하겠습니다.

 

이 상황에서 만약에 대한민국에 거주중인 특정 인물 "김철수" 라는 사람을 찾으려고 합니다. 

대한민국에 김철수 라는 이름을 가진 사람은 아무래도 아주 많을텐데, 그 중에서 도대체 어떤 사람을 골라야 할까요? 

그럴 때에는 이름인 김철수 보다는 모든 사람들이 중복될 수 없는 주민등록번호를 이용해서 김철수씨를 특정하는 것이 옳은 접근이겠죠? 

이 것이 바로 PRIMARY KEYS constraint의 일반적인 용도입니다.

 

그렇다면 PRIMARY KEYS 를 사용하여 table을 한번 만들어보겠습니다.

CREATE TABLE transactions(
    transaction_id INT PRIMARY KEY,
    amount DECIMAL(5, 2)
);

다른 constraint 들을 적용할 때와 비슷하게 column data type 이후에 PRIMARY KEY 키워드를 통해서 적용합니다. 

 

만약 이미 존재하는 테이블에 PRIMARY KEYS 를 적용하려면 어떻게 해야 할까요? 

ALTER TABLE transactions
ADD CONSTRAINT
PRIMARY KEY(transaction_id);

이런 식으로 ADD CONSTRAINT 키워드를 활용해서 적용하면 되겠습니다. 

이미 transaction_id에는 적용이 되어 있으니까, amount column에다가 한번 적용해보죠. 

 

ALTER TABLE transactions
ADD CONSTRAINT
PRIMARY KEY(amount);
-- Error Code: 1068. Multiple primary key defined

PRIMARY KEY 키워드는 한 테이블에 한 개의 column에만 적용할 수 있습니다. 

이미 transactions 테이블에는 transaction_id column에 PRIMARY KEY가 적용되어 있으므로 추가적으로 지정할 수 없는 것이죠. 

 

Object Info를 보시면 transaction_id column이 bold와 underlined 되어 있고, 자료형이 int PK 라고 되어 있음을 확인하여 쉽게 구분할 수 있겠습니다.

 

 

이제 이렇게 PRIMARY KEY constriant가 transaction_id 행에 적용이 되어 있는 transactions 테이블에 몇가지 값을 추가해봅시다.

INSERT INTO transactions
VALUES  (1000, 4.99),
        (1001, 2.89);

 

자 이제 PRIMARY KEY constraint가 효과가 있었는지 한 번 확인하겠습니다. 

transaction_id 가 1001로 중복되게끔 해서 새로운 데이터를 넣어보겠습니다.

INSERT INTO transactions
VALUES  (1001, 3.49);
-- Error Code: 1062. Duplicate entry '1001' for key 'transactions.PRIMARY'

 

예상 했듯이 PRIMARY KEY 와 관련된 에러가 발생하는 것을 알 수 있습니다.

또한 PRIMARY KEY의 역할은 데이터가 NULL이 되지 못하게 방지함도 있었죠? 

INSERT INTO transactions
VALUES  (NULL, 3.49);
-- Error Code: 1048. Column 'transaction_id' cannot be null

 

역시 예상 했듯이 NULL 지정에 대한 오류가 발생한는 것을 확인할 수 있었습니다.

 

 

만약 이러한 transaction 데이터가 매우 많이 존재하는데, 그 중에서 고객이 특정 거래에 대한 환불을 요청했다고 해 봅시다. 

그렇다면 우리는 해당 거래의 transaction_id와 일치하는 amount 데이터를 확인해서 그 만큼 환불하려고 할 것 입니다.

MySQL statements로 확인하자면 이렇겠네요: 

SELECT amount 
FROM transactions
WHERE transaction_id = 1001;

 


정리

 

1. 각 테이블에는 단 한개의 column에 PRIMARY KEY constraint를 지정할 수 있습니다. 

2. PRIMARY KEY 에 지정된 column의 데이터들은 NULL값을 가질 수 없고, 중복될 수 없습니다. 

3. 테이블에 PRIMARY KEY 지정하는 것이 일반적이며, 주로 unique identifier로서 역할을 가진다.

'SQL' 카테고리의 다른 글

[MySQL] Day 11. FOREIGN KEY constraint  (0) 2025.04.07
[MySQL] Day 10. AUTO_INCREMENT attribute  (0) 2025.04.06
[MySQL] Day 8. DEFAULT Constraint  (0) 2025.04.03
[MySQL] Day 7. CHECK Constraint  (0) 2025.04.02
[MySQL] Day 6. UNIQUE & Not Null Constraint  (0) 2025.04.01