MySQL

MySQL - 기본키(Primary Key) , 외래키 (Foreign Key)

쿠쿠s 2022. 3. 21. 19:01

[업데이트 예정입니다..! 가볍게만 참고하세요.]

 

 

기본키 - Primary Key


테이블의 각 row 를 유일성최소성을 만족시키면서 식별할 수 있는 후보키 중에 선택한 Main key 

  • Candidate Key(후보키)중에 선택한 Main Key
  • *유일성과 *최소성을 만족
  • 중복되지 않는 고유값만 허용
  • NULL 값 허용하지 않음
  • 테이블당 하나의 기본키만 지정 가능

 

 

*Candidate Key ?

: 관계형 데이터베이스에서 *릴레이션(Relation)의 튜플을 유일하게 식별할 수 있는 속성 또는 속성의 집합 중, 다음 두 성질을 만족해야 함

  • 유일성(uniqueness) : 릴레이션에 있는 모든 튜플에 대해 유일하게 식별되어야 한다.
  • 최소성(minimality) : 유일성을 가진 키를 구성하는 속성(Attribute) 중 하나라도 제외하는 경우 유일성이 깨지는 것을 의미한다. 즉, 릴레이션의 모든 튜플을 유일하게 식별하는 데 꼭 필요한 속성들로만 구성되어야 한다.

 

*릴레이션 : 테이블이라고 이해

 

 

 

 

1. CREATE 문으로 생성

1. CREATE TABLE 테이블이름

(
    필드이름 필드타입 PRIMARY KEY,

    ...
)

2. CREATE TABLE 테이블이름

(

    필드이름 필드타입,

    ...

    [CONSTRAINT 제약조건이름] PRIMARY KEY (필드이름)

)
-- 기본키 넣는 방법 1
CREATE TABLE people (
  ID INT PRIMARY KEY,
  className VARCHAR(5),
  Name VARCHAR(10)
);

-- 기본키 넣는 방법 2
CREATE TABLE people (
  ID INT,
  className VARCHAR(5),
  Name VARCHAR(10)
  PRIMARY KEY (ID)
);

 

2. ALTER 문으로 PRIMARY KEY 수정

 

추가 - 테이블에 새로운 필드를 추가할 때 해당 필드를 기본 키로 설정하는 방법

ALTER TABLE 테이블이름
ADD 필드이름 필드타입 PRIMARY KEY

ALTER TABLE 테이블이름
ADD [CONSTRAINT 제약조건이름] PRIMARY KEY (필드이름)

변경 - 기존에 존재하는 필드를 기본 키로 설정하는 방법

 

ALTER TABLE 테이블이름
MODIFY COLUMN 필드이름 필드타입 PRIMARY KEY

ALTER TABLE 테이블이름
MODIFY COLUMN [CONSTRAINT 제약조건이름] PRIMARY KEY (필드이름)

 

삭제 - 해당 테이블 Primary key 제약 조건을 삭제

ALTER TABLE 테이블이름
DROP PRIMARY KEY

 

 

 

 

* Unique 제약 조건


- 해당 필드는 서로 다른 값을 가져야 한다. (중복 저장 x)

- NULL 값 가능

 

1. CREATE TABLE 테이블이름

(
    필드명 필드타입 UNIQUE,

    ...
)

2. CREATE TABLE 테이블이름

(
    필드이름 필드타입,

    ...,

    [CONSTRAINT 제약조건이름] UNIQUE (필드이름)
)
CREATE TABLE people (
  ID INT PRIMARY KEY,
  className VARCHAR(5),
  Name VARCHAR(10)
  UNIQUE (ID)
);

 

 

 

 

외래키 - Foreign Key


  • 다른 테이블의 Primary Key 와 연결되는(참조되는) 테이블의 column 을 의미
  • 한 테이블을 다른 테이블과 연결해주는 역할
  • 하나의 테이블을 다른 테이블에 의존하게 만듬
  • 외래키 제약 조건을 설정할 때 참조되는 테이블은 UNIQUE나 PRIMARY KEY 제약 조건 설정 필수

 

 

외래 키 추가

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

 

외래 키 삭제

ALTER TABLE _자식테이블명 DROP FOREIGN KEY _자식테이블외래키

- 외래키는 NULL값이거나 또는 부모 테이블의 기본 키 값과 같아야 합니다. 그렇지 않으면 에러가 발생합니다.

 

 

 

 

외래 키 제약 - ON UPDATE, ON DELETE

 

 FOREIGN KEY 제약 조건에 의해 참조되는 테이블의 데이터의 수정이나 삭제가 발생하면, 참조하고 있는 테이블의 데이터도 같이 영향을 받습니다. 이때 참조하고 있는 테이블의 동작은 다음 키워드를 사용하여 제약 조건에서 미리 설정을 할  수 있습니다.

 

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

 

 

 

 

 

 

 

 

참고

https://prinha.tistory.com/

얄코 강의

'MySQL' 카테고리의 다른 글

MySQL - View  (0) 2022.03.21
MySQL - 집계함수와 그룹화  (0) 2022.03.02
MySQL 기초 - 간단한 문법  (0) 2022.02.25