PK(Primary Key/기본키)는 사람마다 구별하기 위한 Key인 주민등록번호가 있듯 수많은 데이터를 구별하기 위해 존재하는 것이 바로 PK이다.
이 PK는 비어있어도 안되며(NOT NULL), 중복 되어서도 안된다(Unique). 가끔 주민등록번호를 특정 데이터를 식별할 수 있는 Key로 생각하여 PK로 지정하는 경우가 있는데, 이는 잘못된 방법이다. 주민등록번호는 가능성은 희박하지만 변경될 가능성이 있기 때문이다. 때문에 현업에서 PK는 랜덤값이나 숫자가 1씩 증가하는 방식으로 생성한다.
FK(Foreign Key/외래키)는 참조하는 테이블과 참조되는 테이블로 나누어진다. 이 FK로 테이블간의 관계가 어떻게 되는지 확인할 수 있다.(1:1, 다:다, 다:1)
INT
휴대폰 번호나 주민등록번호 같은 경우는 정수가 아닌 문자로 저장해야한다.
숫자간의 계산에 사용되지 않고 고유의 값 그대로 사용해야하기 때문이다.
BIGINT
DECIMAL
VARCHAR
DATETIME
TIMESTAMP
특정 행에 데이터 값이 없을 때는 null
로 표현한다. 이 null은 그 자체로 "값이 없다"를 나타내는 것인데 테이블을 정의할 때 특정 행이 null을 갖지 못하도록 설정할 수 있다. 이걸 not null
이라고 한다.
0과 null은 다른 의미.
1 + null = 1이 아닌 null
할당되지 않아 적용이 불가능한 값
Charset은 문자집합, Collation은 정렬을 뜻한다.
실생활의 모든 데이터는 텍스트 기반
이다. 이로인해 텍스트 데이터를 저장할 수 있는 자료형이 필요했고 그렇게 나온 것이 UTF-8
이다.
UFT-8
은 1~4바이트까지 저장이 가능하도록 설계되었는데 실제로 전세계 모든 문자가 21bit로 3바이트가 조금 안되는 양에 저장이 되기 때문에 Mysql은 공간절약 + 속도 향상을 위해 UTF-8
을 3바이트 가변 자료형으로 설계하였다.
하지만 Emoji같은 새로운 문자가 UTF-8
의 남은 4바이트 영역을 사용하면서 Mysql도 4바이트 가변 자료형을 추가하는데 그것이 utf8mb4
이다.