티스토리 뷰

먼저 읽어볼만한 글

CREATE TABLE 예시

MySQL 테이블 생성의 예는 아래와 같다. 아래는 회원 테이블 생성의 간단한 예이다.

CREATE TABLE user (
  id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
  email VARCHAR(255) NOT NULL UNIQUE,
  password_encrypted VARCHAR(255) NOT NULL,
  is_deleted TINYINT(1) NOT NULL DEFAULT 0,
  created_datetime DATETIME DEFAULT CURRENT_TIMESTAMP,
  updated_datetime DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (id)
)
DEFAULT CHARACTER SET utf8mb4
DEFAULT COLLATE utf8mb4_unicode_ci;
  • id 컬럼은 PRIMARY KEY이다. 타입을 INT UNSIGNED로 선언하여 약 42억개의 서로 중복되지 않는 PK를 가진 로우를 저장할 수 있다. AUTO_INCREMENT에 의해 새로운 로우가 INSERT 될 때마다 1부터 4294967295까지의 PK가 자동 생성된다. 괄호 안의 숫자는 데이터 조회시 출력될 자리수로 실제 타입이 가진 크기와 무관하다.


  • email 컬럼은 회원 이메일 주소를 저장한다. VARCHAR 타입의 괄호 안 숫자는 저장 가능한 최대 글자 수로 바이트 크기가 아님에 유의한다. 한글 1자 또한 영문자 1자와 동일하게 1개 글자로 계산된다. CHAR_LENGTH() 함수와 동일하다. (글자수가 아닌 바이트 관점에서 UTF-8 기준 한글 1자는 3바이트, 영문자 포함 아스키 코드는 1바이트로 저장된다. LENTH() 함수와 동일하다.)


  • password_encrypted 컬럼은 회원 해쉬 변환된 비밀번호를 저장한다. 보안상의 이유로 반드시 비밀번호를 그대로 저장하지 않고 해쉬 변환 후 저장해야 한다. BCrypt 해쉬 알고리즘을 사용할 경우 60-bytes 크기의 문자열 해쉬를 생성한다. 해쉬 변환 관련 글은 이 글을 참고한다.


  • is_deleted 컬럼는 회원 삭제 여부를 저장한다. false는 0, true이면 1을 저장하면 된다. TINYINT는 -128부터 127까지를 저장 가능한 타입이다. INT와 마찬가지로 괄호 안의 숫자는 데이터 조회시 출력될 자리수이다.


  • created_datetime 컬럼은 회원 가입일시를 저장한다. DATETIME은 일시를 저장할 수 있는 타입이다. 기본값으로 CURRENT_TIMESTAMP를 명시하면 자동으로 현재 일시가 저장된다.


  • updated_datetime 컬럼은 회원 정보의 수정일시를 저장한다. 회원 정보 변경시 자동으로 현재 일시가 저장된다.


  • 테이블의 기본 언어셋으로 모든 유니코드를 지원하는 utf8mb4을 지정하였다. COLLATE는 정렬의 정확도를 결정한다. 비영어권은 utf8mb4_unicode_ci를 지정해야 정확하게 정렬된다.


  • MySQL 5.5 이상부터는 스토리지 엔진을 생략해도 기본값으로 InnoDB가 설정된다. InnoDB는 트랜잭션 처리를 지원한다.

참고 글

TAG
댓글
댓글쓰기 폼