기본키&고유키&외래키, 뷰 // MYSQL(2-1)
2022. 2. 11. 19:50
주제
- 기본키
- 고유키
- 외래키
- 뷰(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 |