[MySQL] 01. テーブルの作成

27424 ワード

テーブルの作成
## 형태
CREATE TABLE [DB명.테이블명] (
... 컬럼 설정
)
... 테이블 설정
;

## 예시
CREATE TABLE testdb.users (
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(20) NOT NULL,
age INT UNSIGNED NOT NULL,
married TINYINT NOT NULL,
comment TEXT NULL,
create_at DATETIME NOT NULL DEFAULT now(),
PRIMARY KEY(id),
UNIQUE INDEX name_UNIQUE (name ASC)
)
COMMENT = 'user infomation'
DEFAULT CHARACTER SET = utf8
ENGINE = InnoDB;
データ型
## 위치
CREATE TABLE [DB명.테이블명] (
... 컬럼 설정 <<< 이 부분!
)
... 테이블 설정
;

## 형태
[컬럼명] [자료형] ...

## 종류
INT : 정수형
		EX) id INT ... : id는 숫자 형태로 저장

FLOAT, DOUBLE : 소수점까지 표현 할 때
		EX) 

VARCHAR(자릿수) : 가변길이의 문자열
		EX) name VARCHAR(20) ... : name은 최대 20자릿수까지 문자 형태로 저장

CHAR(자릿수) : 고정길이의 문자열
		EX) name CHAR(10) ... : name은 10자릿수 문자 형태로 저장

TEXT : 긴 글 저장할 때
		EX) post TEXT ... : post는 긴 문장을 저장

TINYINT : -128 ~ 127 까지의 정수 저장할때 사용(Bool값도 OK)
		EX) 

DATETIME : 날짜 & 시간에 대한 정보를 저장
		EX) create_at DATETIME ... DEFAULT now() : create_at은 디폴트로 현재 시간을 저장
データバックアップオプション
## 형태
[컬럼명] [자료형] [옵션] ...
[컬럼명] [자료형] [옵션1] [옵션2] ... : 여러개도 가능

## 종류
NULL vs NOT NULL : 빈칸 허용할지 안할지
		EX) id INT NOT NULL ... : id는 빈칸 불가능
		EX) name VARCHAR(20) NULL : name은 빈칸 가능

AUTO_INCREMENT : 숫자를 자동적으로 올림(보통 index에서 사용)
		EX) id INT NOT NULL AUTO_INCREMENT : id는 자동적으로 숫자가 라벨링됨

UNSIGNED : 숫자형은 기본적으로 음수범위 지원하지만 UNSIGNED는 양수만 가능
		EX) age INT UNSIGNED NOT NULL : age는 음수표현을 못함
		EX) size DOUBLE UNSIGNED ... (X) : FLOAT, DOUBLEUNSIGNED 못쓴다!

ZEROFILL : 숫자의 자릿수가 고정되어 있을 때 사용
		EX)

DEFAULT now() : DATETIME에 기본값으로 현재시간을 저장!
		EX) create_at DATETIME NOT NULL DEFAULT now() : create_at은 디폴트로 현재 시간 저장
		EX) create_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP : 위와 동일
PK、Foreign Key+その他のオプション
PRIMARY KEY

## 형태
CREATE TABLE [DB명.테이블명] (
... 컬럼 정의
PRIMARY KEY(PK로 사용할 컬럼명)
);

## 예시
CREATE TABLE testdb.table1 (
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(20) NOT NULL,
PRIMARY KEY(id),
);

FOREIGN KEY
- 테이블들을 연결해주는 역할
- 참조되는 테이블의 필드가 반드시 UNIQUE or PRIMARY KEY 가 설정되어 있어야 됨

## 형태
CREATE TABLE [DB명.테이블명] (
... 컬럼 정의
CONSTRAINT ([제약조건명])
FOREIGN KEY([컬럼명])
REFERENCES [DB명.테이블명]([참고할 컬럼명])
);

## 예시
CREATE TABLE testdb.table2 (
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(20) NOT NULL,
PRIMARY KEY(id),
);

UNIQUE INDEX : 해당 값이 고유여야 하는지에 대한 옵션
		형태) UNIQUE INDEX [인덱스명] ([컬럼명] [옵션])
		EX) UNIQUE INDEX name_UNIQUE (name ASC) 

ON DELETE CASCADE : 

ON UPDATE CASCADE
表の設定
## 위치
CREATE TABLE [DB명.테이블명] (
... 컬럼설정
)
... 테이블 설정 <<< 이 부분!
;

CREATE TABLE nodejs.users (
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(20) NOT NULL,
age INT UNSIGNED NOT NULL,
married TINYINT NOT NULL,
post TEXT NULL,
create_at DATETIME NOT NULL DEFAULT now(),
PRIMARY KEY(id),
UNIQUE INDEX name_UNIQUE (name ASC)
)
COMMENT = 'user infomation'
DEFAULT CHARACTER SET = utf8
ENGINE = InnoDB;

## 종류
COMMENT : 테이블에 대한 보충설명(필수X)
		EX) COMMENT = '보충설명'

DEFAULT CHARSET = utf8 : 한글 입력을 위한 옵션

ENGINE = InnoDB
表に関連するコマンド
## 만들어진 테이블 확인
형태) mysql> DESC [테이블명];
EX)  mysql> DESC users;

## 테이블 잘못 만들었을 때 제거
형태) mysql> DROP TABLE [테이블명];
EX)  mysql> DROP TABLE users;

## 테이블 확인하기
EX)  mysql> SHOW TABLES;
## users 테이블 생성

CREATE TABLE testdb.users (
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(20) NOT NULL,
age INT UNSIGNED NOT NULL,
married TINYINT NOT NULL,
comment TEXT NULL,
create_at DATETIME NOT NULL DEFAULT now(),
PRIMARY KEY (id),
UNIQUE INDEX name_UNIQUE (name ASC)
)
COMMENT = 'user infomation'
DEFAULT CHARACTER SET = utf8
ENGINE = InnoDB;
## comments 테이블 생성

CREATE TABLE testdb.comments (
id INT NOT NULL AUTO_INCREMENT,
commenter INT NOT NULL,
comment VARCHAR(100) NOT NULL,
create_at DATETIME NOT NULL DEFAULT now(),
PRIMARY KEY (id),
INDEX commenter_idx (commenter ASC),
CONSTRAINT commenter FOREIGN KEY (commenter) REFERENCES testdb.users (id)
ON DELETE CASCADE
ON UPDATE CASCADE
)
COMMENT = '댓글 테이블'
DEFAULT CHARSET = utf8mb4
ENGINE = InnoDB;