home강의 홈으로
Section 4. MySQL 더 깊이 알아가기
Lesson 1. 기본키와 고유키, 그리고 외래키

1. 기본키(Primary Key) 더 알기

  • 중복되지 않는 고유값만 허용
  • NULL 값 허용하지 않음
  • 테이블당 하나의 기본키만 지정 가능
-- 기본키 넣는 방법 1 CREATE TABLE people ( first_name CHAR(2) PRIMARY KEY, last_name CHAR(3), nickname VARCHAR(10) ); -- 기본키 넣는 방법 2 CREATE TABLE people ( first_name CHAR(2), last_name CHAR(3), nickname VARCHAR(10), PRIMARY KEY (first_name) );

기본 키 변경하기

ALTER TABLE people DROP PRIMARY KEY; ALTER TABLE people ADD PRIMARY KEY (last_name);

다중 기본키

CREATE TABLE people ( first_name CHAR(2), last_name CHAR(3), nickname VARCHAR(10), PRIMARY KEY (first_name, last_name) ); INSERT INTO PEOPLE VALUES('홍', '길동', '별명'); INSERT INTO PEOPLE VALUES('전', '우치', '별명'); INSERT INTO PEOPLE VALUES('전', '길동', '별명'); INSERT INTO PEOPLE VALUES('홍', '우치', '별명'); INSERT INTO PEOPLE VALUES('홍', '길동', '별명'); INSERT INTO PEOPLE VALUES('전', '우치', '별명');




2. 고유키(Unique) 더 알기

  • 중복 제한, NULL 값 가능
-- 고유키 넣는 방법 1 CREATE TABLE people ( person_id INT AUTO_INCREMENT PRIMARY KEY, first_name CHAR(2) UNIQUE, last_name CHAR(3) ); -- 고유키 넣는 방법 2 CREATE TABLE people ( person_id INT AUTO_INCREMENT PRIMARY KEY, first_name CHAR(2), last_name CHAR(3), UNIQUE (first_name) ); -- 다중 고유키 CREATE TABLE people ( person_id INT AUTO_INCREMENT PRIMARY KEY, first_name CHAR(2), last_name CHAR(3), UNIQUE (first_name, last_name) );




3. 외래키

외래 키 추가하기

ALTER TABLE _자식테이블명 ADD CONSTRAINT _제약명 FOREIGN KEY ( _자식테이블외래키 ) REFERENCES 부모테이블명 ( _부모테이블기본키 ) -- ON DELETE _삭제시제약 -- ON UPDATE _수정시제약

외래 키 삭제하기

ALTER TABLE _자식테이블명 DROP FOREIGN KEY _자식테이블외래키
  • 💡 외래키는 NULL값이거나 또는 부모 테이블의 기본 키값과 같아야 합니다.

businesses에 sections에 대한 외래키를 설정한 뒤 실행해보세요.

INSERT INTO businesses (fk_section_id, business_name, status, can_takeout) VALUES ('8', '섹션에없는식당', 'OPN', '1');



외래 키 제약

제약 설명 비고
NO ACTION, RESTRICT 자식 테이블에 해당 외래키가 있을 때 수정/삭제되지 않음
CASCADE 자식 테이블의 해당 행도 수정/삭제
SET NULL 자식 테이블의 외래키를 NULL로 자식 외래키가 NOT NULL일 시 설정 불가
SET DEFAULT 자식 테이블의 외래키를 기본값으로 InnoDB 엔진에서 사용 불가

💡 businesses의 외래키를 RESTRICT, CASCADE로 바꿔가며 아래를 실행해보세요.

DELETE FROM sections WHERE section_id = 1; DELETE FROM sections WHERE section_id = 2; UPDATE sections SET section_id = 10 WHERE section_id = 3; UPDATE sections SET section_id = 11 WHERE section_id = 4;

🤔얄코에게 질문하기질문은 반.드.시 이리로 보내주세요! ( 강의사이트 질문기능 ✖ )

강의에서 이해가 안 되거나 실습상 문제가 있는 부분,
설명이 잘못되었거나 미흡한 부분을 메일로 알려주세요!

답변드린 뒤 필요할 경우 본 페이지에
관련 내용을 추가/수정하도록 하겠습니다.

이메일 주소
yalco@yalco.kr
메일 제목 (반드시 아래 제목을 붙여넣어주세요!)
[질문] 조금 더 깊은 MySQL 4-1

🛑질문 전 필독!!

  • 구글링을 먼저 해 주세요. 들어오는 질문의 절반 이상은 구글에 검색해 보면 1분 이내로 답을 찾을 수 있는 내용들입니다.
  • 오류 메시지가 있을 경우 이를 구글에 복붙해서 검색해보면 대부분 짧은 시간 내 해결방법을 찾을 수 있습니다.
  • 강의 페이지에 추가사항 등 놓친 부분이 없는지 확인해주세요. 자주 들어오는 질문은 페이지에 추가사항으로 업데이트됩니다.
  • "유료파트의 강의페이지는 어디 있나요?" - 각 영상의 시작부분 검은 화면마다 해당 챕터의 강의페이지 링크가 있습니다.
  • 질문을 보내주실 때는 문제가 어떻게 발생했고 어떤 상황인지 등을 구체적으로 적어주세요. 스크린샷을 첨부해주시면 더욱 좋습니다.
🌏 Why not change the world?