[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, DOUBLE은 UNSIGNED 못쓴다!
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;
Reference
この問題について([MySQL] 01. テーブルの作成), 我々は、より多くの情報をここで見つけました https://velog.io/@9wonsigner/MySQL-01.-테이블-생성テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol