일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- C++
- pass by reference
- pointer
- function
- 백준
- array
- 알고리즘
- assignment operator
- OOP
- 반복문
- raw data
- string
- 포인터
- baekjoon
- 티스토리챌린지
- 함수
- Python
- Object Oriented Programming
- predictive analysis
- 오블완
- const
- Class
- Deep Learning
- programming
- vscode
- 문자열
- Data Science
- 배열
- 파이썬
- Pre-processing
- Today
- Total
Channi Studies
[MySQL] Day 9. PRIMARY KEYS constraint 본문
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 |