01 MySQL key 종류
- Primary key
- Unique key
- index key
02 무결성 제약조건
03 개념적 key의 종류
슈퍼키, 후보키, 기본키, 대리키, 대체키, 외래키
04 인덱스 더 알아보기
-B-tree
- 클러스터
- 논클러스터
01
[primary key(기본키)]
: 테이블 당 하나만 존재할 수 있는 가장 기본이 되는 Key 이다.
다른 레코드 값과 중복될 수 없고 null일 수도 없다.
* 기본키 설정하기
- 테이블을 새로 만들 때 (column1이 primary key일 경우)
CREATE TABLE table_name(
column1 datatype NOT NULL PRIMARY KEY,
column2 datatype,
...
);
- 이미 만들어진 테이블을 수정할 떄
ALTER TABLE table_name
ADD PRIMARY KEY (column_name);
-> 이 경우에는 primary key로 설정하는 column이 NOT NULL이어야 한다.
[Unique Key]
- 값의 중복을 허용하지 않음
- 유니크키가 설정된 칼럼에 입력되는 데이터가 각각 유일하다는 것을 보장해줌
- 하나의 테이블에 여러 개의 유니크 키 설정 가능
- 주로 기본키 설정후 추가적으로 고유한 식별자가 있는 경우 유니크키로 설정
- 유니크키의 값은 null값이 허용됨
*유니크키 설정하기
-테이블을 새로 만들 떄(column1,2가 고유 식별자일 경우)
CREATE TABLE table_name(
column1 datatype UNIQUE,
column2 datatype UNIQUE,
column3 datatype,
...
);
혹은
CREATE TABLE table_name(
column1 datatype,
column2 datatype,
column3 datatype,
...
UNIQUE INDEX index1_name(column1),
UNIQUE INDEX index2_name(column2)
);
- 이미 만들어진 테이블 스키마를 수정할 때
ALTER TABLE table_name
ADD UNIQUE INDEX index_name(column_name);
혹은
ALTER TABLE table_name
ADD UNIQUE (column_name);
[Index Key]
- 테이블 마다 여러 개의 인덱스 key설정 가능
- 중복 값과 null값이 허용됨
- 검색 속도 향상시키기 위한 용도로 활용
* 인덱스키 설정하기
- 테이블을 새로 만들 떄 (column1,2에 대해 인덱스를 만드는 경우)
CREATE TABLE table_name(
column1 datatype,
column2 datatype,
column3 datatype,
....
INDEX index1_name(column1),
INDEX index2_name(column2)
);
- 이미 만들어진 테이블 스키마를 수정할 때
ALTER TABLE table_name
ADD INDEX index_name(column_name);
[AUTO_INCREMENT]
: 각 컬럼의 기본값으로 설정해 줄 수 있는 옵션 중 하나
- 주로 고유 식별자 번호를 자동으로 발급하는데 사용
- 레코드의 값이 중복되지 않고 1씩 자동 증가하게 됨
* INSERT INTO로 레코드 추가시 AUTO_INCREMENT에 해당하는 컬럼에 NULL을 넣거나 입자 목록에서 생략하면 자동으로 값이 채워짐
예시)
INSERT INTO market VALUES(NULL, '김민준','사과');
or
INSERT INTO market( seller,product) VALUES('김민준', ' 사과');
실습>
CREATE DATABASE day_3;
USE day_3;
CREATE TABLE account(nickname VARCHAR(30) NOT NULL PRIMARY KEY,
address VARCHAR(100),
manner_point INT,
reg_date DATETIME);
CREATE TABLE market(market_id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY
seller VARCHAR(30),
produdct VARCHAR(30),
amout INT,
price BIGINT,
reg_data DATETIME,
FOREIGN KEY (seller) REFERENCES amount(nickname));
레코드 추가 예시>
INSERT INTO account VALUES('김영진','서울','100,'2023-03-07 10:10:10');
''
[02 무결성 제약 조건]
무결성: 데이터의 정확성, 일관성을 나타냄
- 데이터에 결함이 없는 상태, 즉 데이터를 정확하고 일관되게 유지하는 것을 의미함
<무결성 제약조건>
: 데이터베이스의 정확성, 일관성을 보장하기 위해 저장, 삭제, 수정 등을 제약하기 위한 조건을 뜻함
1. 개체 무결성 제약조건(기본키 제약 조건)
: 각 테이블의 기본키를 구성하는 속성은 NULL값이나 중복 값이 될 수 없음
2. 참조 무결성 제약조건(외래키 제약 조건)
: 외래키 칼럼의 값은 NULL이거나 참조하는 부모 테이블 컬럼의 값과 동일해야 함
3. 도메인 무결성 제약조건
: 속성 안에 들어가는 값들은 정의된 도메인에 속한 값이어야 함
4. 고유 무결성 제약 조건
: 속성 값들이 서로 달라야 함(NULL은 허용)
[04 개념적 키의 종류]
<슈퍼키>
투플을 유일하게 식별할 수 있는 하나의 속성 혹은 속성의 집합
-> 투플을 유일하게 식별할 수 있는 값이면 모두 슈퍼키가 될 수 있음
<후보키>
투플을 유일하게 식별할 수 있는 속성의 최소 집합
* 2개 이상의 속성으로 이루어진 키를 복합키라고 함
<기본키>
여러 후보키 중 하나를 선정하여 대표로 삼는 키
* 기본키 선정 시 고려사항
- 투플을 식별할 수 있는 고유한 값을 가져야 함
- NULL값 허용X
- 키 값의 변동이 일어나지 않아야 함
- 최대한 적은 수의 속성을 가진 것이어야 함
* 릴레이션 스키마를 표현할 때 기본키는 밑줄을 그어 표시
<대리키(인조키)>
- 기본키가 보안을 요하거나, 여러 개의 속성으로 구성되어 복잡하여 마땅한 기본키가 없을 떄는 일련번호 같은 가상의 속성을 만들어 기본키로 삼는 경우를 말함
<대체키>
- 기본키로 선정되지 않은 후보키
<외래키>
- 다른 릴레이션의 기본키를 참조하여 릴레이션 간의 관계를 표현함
* 외래키 특장
- 참조하고(외래키) , 참조되는(기본키) 양쪽 도메인은 서로 같아야 함
- 기본키 값이 변경되면 외래키 값도 변경됨
- NULL 값과 중복 값 등이 허용됨
- 자기 자신의 기본키를 참조하는 외래키도 가능함
[04 인덱스 더 알아보기]
<B-Tree >
Balanced Tree, 균형트리 - DBMS 는 빠른 값 검색을 위해 Key를 B-Tree로 정렬해 둠
*논클러스터 방식
스토리지 어딘가에 만들어진 인덱스, 스토리지 어딘가에 저장된 데이터들 목록
*클러스터 방식
B-Tree의 말단에 바로 데이터를 정렬해 두는 방식
<논클러스터 방식 vs 클러스터 방식>
- 레코드 추가가 빠르다 - 레코드 추가가 느리다
- 검색이 느리다 - 검색이 빠르다
-Key가 여러 개일 경우에도 테이블당 하나만 생성됨