기본키&고유키&외래키, 뷰 // MYSQL(2-1)

2022. 2. 11. 19:50

주제

  1. 기본키
  2. 고유키
  3. 외래키
  4. 뷰(VIEW)

 


1.기본키

  • 행식별을 위한 column
  • 중복되지 않는 고유값(unique)
  • 인덱스로 자동 등록
  • 보통 auto_increment 제약을 함께 사용
  • NULL값 사용 불가

 

1)기본키 설정 및 변경

-- 테이블 생성시 기본키 넣는 방법 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);

 

2)다중 기본키

  • 두가지 column의 값을 하나의 기본키로 묶는 것임
-- 다중 기본키 등록
CREATE TABLE people (
  first_name CHAR(2),
  last_name CHAR(3),
  nickname VARCHAR(10),
  PRIMARY KEY (first_name, last_name)
);
  • first_name과 last_name을 기본키로 묶음.  (first_name, last_name)  = ('kim','jun') 이런식으로 기본키가 구성됨
  • 물론 first_name이 중복되어도, last_name만 다르다면 다른 키로 인식

 

2.고유키

  • 고유함
  • NULL값 가능

 

3. 외래키

  • 외래키는 부모 테이블의 column과 자식 테이블의 column을 설정할 수 있음.
  • 설정된 자식테이블의 column값은 설정된 제약에 따라 부모테이블의 column에 영향을 받음
  • 자식테이블의 column은 NULL값이거나, 참조하는 부모 테이블의 column값중 하나여야 함.(예를 들어, 외래키로 설정된 부모테이블 column의 값으로 1~10이 있는데, 자식 테이블의 column값으로 11이 올 수 없음)
-- 외래키 설정--
ALTER TABLE _자식테이블명
  ADD CONSTRAINT _제약명 
  FOREIGN KEY ( _자식테이블외래키 )
  REFERENCES 부모테이블명 ( _부모테이블기본키 )
  -- ON DELETE _삭제시제약 
  -- ON UPDATE _수정시제약

 

  • 외래키의 제약은 다음과 같음
    • NO ACTION, RESTRICT : 자식 테이블에 부모테이블을(의column을) 참조하는 값이 있을 경우 , 참조되는 부모테이블의 값이 수정/삭제되지 않음
    • CASCADE : 자식 테이블에 부모테이블을(의column을) 참조하는 값이 있을 경우 , 참조되는 부모테이블의 값이 수정/삭제시 자식테이블의 값도 수정 및 삭제
    • SET NULL : 자식 테이블에 부모테이블을(의column을) 참조하는 값이 있을 경우 , 참조되는 부모테이블의 값이 수정/삭제시 자식테이블의 값이 NULL이 됨

 

4. 뷰(VIEW)

1)VIEW란?

  • DB의 테이블에서, 데이터 일부를 추출하여 표로 만듬.
  • 즉 DB에서 필요한 내용들을 추출하여 적절히 조합하여 새로운 표를 만들고 이를 저장해뒀다가 필요할때마다 사용한다고 보면 됨
-- 뷰 생성
CREATE VIEW section_view AS
SELECT section_id, section_name
FROM sections;

-- 뷰 삭제
DROP VIEW section_view;

 

2)VIEW를 쓰는 이유

  • 보안을 위하여
    • mysql은 여러명의 사용자가 접속할 수 있음. 그러나 그들에게 모든 자료를 제공할 수 없는 경우가 많음
    • 이때, 필요한 자료를 조합하여 view를 만들고, 그 view에 대한 권한만 특정사용자에게 제공하면 , 그 사용자는 허락된 view에대해서만 접근이 가능함. (원본 데이터에 조회불가)
  • 편리함
    • 그냥 복잡한 쿼리를 한번 구현해놨는데, 이걸 또 하긴 귀찮으니까 뷰로 저장해두는 것임

 

'mysql' 카테고리의 다른 글

WSL & UBUNTU : MYSQL 설치  (0) 2022.04.07
INDEX, TRANSACTION, 권한부여 // MYSQL(2-2)  (0) 2022.02.11
DATABASE // MYSQL(1)  (0) 2022.02.11

BELATED ARTICLES

more