< 주석 >
1. # 한 줄 주석
2. -- 한 줄 주석
3. /* 두 줄
이상의
주석 */
● Database
▼ 생성
CREATE DATABASE database_name;
▼ 사용
USE database_name;
▼ 변경
-- 데이터베이스명 변경
ALTER DATABASE database_name RENAME TO new_database_name;
-- 문자 집합 변경
ALTER DATABASE database_name CHARACTER SET = charset_name;
-- 콜레이션 변경
ALTER DATABASE database_name COLLATE = collation_name;
-- 문자 집합 + 콜레이션 변경
ALTER DATABASE database_name CHARACTER SET = charset_name COLLATE = collation_name;
< CHARACTER SET >
1. utf8 : UTF-8 유니코드 지원 (1~3바이트)
2. euckr : 한글 지원 (1~2바이트)
< COLLATE >
1. utf8_bin
2. utf8_general_ci (기본 설정) ( ci = case-insensitive ☞ 대 · 소문자 구분 안 함 )
3. euckr_bin
4. euckr_korean_ci
▼ 삭제
DROP DATABASE [IF EXISTS] database_name; /* IF EXISTS : 데이터베이스가 존재할 경우 */
▼ 목록
SHOW {DATABASES | SCHEMAS};
● Table
▼ 생성
CREATE TABLE table_name
(
column_name column_type(column_length) [constraint_keyword],
column_name column_type [NOT NULL],
column_name column_type [DEFAULT default_value],
column_name column_type [AUTO_INCREMENT] [UNIQUE [KEY]] [[PRIMARY] KEY] ,
column_name column_type [REFERENCES another_table_name(column_name)],
column_name column_type [CHECK (conditional_expr)],
...
[[CONSTRAINT [symbol]] UNIQUE (column_name[,column_name...])]
[[CONSTRAINT [symbol]] PRIMARY KEY (column_name[,column_name...])]
[[CONSTRAINT [symbol]] FOREIGN KEY (column_name[,column_name...]) REFERENCES another_table_name(column_name[,column_name...])]
[[CONSTRAINT [symbol]] CHECK (conditional_expr)]
);
-- 이미 생성된 테이블에서 값을 복사하여 생성
CREATE TABLE table_name AS
SELECT column_name_1, column_name_2,...
FROM another_table_name
WHERE ....;
< 제약 조건 ( Constraint ) >
1. NOT NULL : NULL 값 허용 안 함
2. DEFAULT : 기본값 설정 ( ex) DEFAULT 0 )
- AUTO_INCREMENT : 자동 증가 기능 ( 기본 시작 값은 1이며 새 레코드마다 1씩 증가 )
3. UNIQUE : 서로 다른 값을 가져야 함
4. PRIMARY KEY : NOT NULL + UNIQUE
5. FOREIGN KEY : 하나의 테이블을 다른 테이블에 의존
6. CHECK : 조건 설정 후 부합하는지 확인 ( ex) CHECK (AGE >= 20) )
▼ 변경
-- 테이블명 변경
## ALTER
ALTER TABLE table_name RENAME [TO | AS] new_table_name;
## RENAME
RENAME TABLE table_name TO new_table_name;
-- 데이터베이스 변경
RENAME TABLE `database_name`.`table_name` TO `another_database_name`.`table_name`;
-- AUTO_INCREMENT 시작값(숫자) 변경
ALTER TABLE table_name AUTO_INCREMENT = start_value;
▼ 삭제
-- 테이블 자체 + 데이터 삭제
DROP TABLE [IF EXISTS] table_name;
-- 데이터만 삭제
TRUNCATE TABLE [IF EXISTS] table_name;
▼ 목록
SHOW TABLES;
▼ 정보
## DESCRIBE
DESCRIBE table_name;
## SHOW
SHOW CREATE TABLE table_name;
● Column
▼ 추가
ALTER TABLE table_name ADD [COLUMN] column_name column_type {constraint_keyword};
▼ 변경
-- 필드명 변경
## RENAME
ALTER TABLE table_name RENAME COLUMN column_name TO new_column_name;
## CHANGE
ALTER TABLE table_name CHANGE [COLUMN] column_name new_column_name column_type;
-- 타입 or 제약조건 변경
ALTER TABLE table_name MODIFY [COLUMN] column_name column_type {constraint_keyword};
-- 필드 순서 변경
ALTER TABLE table_name CHANGE [COLUMN] column_name column_name column_type AFTER front_column_name;
▼ 삭제
ALTER TABLE table_name DROP [COLUMN] column_name;
▼ 목록
SHOW COLUMNS FROM table_name;
● Contraint
▼ 추가
# UNIQUE
ALTER TABLE table_name ADD [CONSTRAINT [symbol]] UNIQUE [INDEX | KEY] [index_name] [index_type] (column_name[,column_name...]);
/* ALTER TABLE Persons ADD [CONSTRAINT UC_Person] UNIQUE (ID,LastName); */
# PRIMARY KEY
ALTER TABLE table_name ADD [CONSTRAINT [symbol]] PRIMARY KEY [index_type] (column_name[,column_name...]);
/* ALTER TABLE Persons ADD [CONSTRAINT PK_Person] PRIMARY KEY (ID,LastName); */
# FOREIGN KEY
ALTER TABLE table_name
ADD [CONSTRAINT [symbol]] FOREIGN KEY [index_name] (column_name[,column_name...])
REFERENCES another_table_name(column_name[,column_name...])
[ON UPDATE | ON DELETE] [CASCADE | SET NULL | NO ACTION | SET DEFAULT | RESTRICT];
/* ALTER TABLE Orders ADD [CONSTRAINT FK_PersonOrder] FOREIGN KEY (PersonID) REFERENCES Persons(PersonID); */
# CHECK
ALTER TABLE table_name ADD [CONSTRAINT [symbol]] CHECK (conditional_expr);
/* ALTER TABLE Persons ADD [CONSTRAINT CHK_PersonAge] CHECK (Age>=18 AND City='Sandnes'); */
< FOREIGN KEY 제약 조건 >
1. ON DELETE
2. ON UPDATE
< FOREIGN KEY 제약 조건에서의 동작 >
1. CASCADE : 참조되는 테이블에서 데이터 삭제/수정 시, 참조하는 테이블에서도 같이 삭제/수정
2. SET NULL : 참조되는 테이블에서 데이터 삭제/수정 시, 참조하는 테이블의 데이터는 NULL로 변경
3. NO ACTION : 참조되는 테이블에서 데이터 삭제/수정 시, 참조하는 테이블의 데이터는 변경되지 않음
4. SET DEFAULT : 참조되는 테이블에서 데이터 삭제/수정 시, 참조하는 테이블의 데이터는 필드의 기본값으로 설정
5. RESTRICT : 참조되는 테이블에서 데이터가 남아 있을 시, 참조되는 테이블의 데이터를 삭제/수정 불가능
▼ 변경
ALTER TABLE table_name MODIFY [COLUMN] column_name column_type symbol;
# NOT NULL
ALTER TABLE table_name MODIFY [COLUMN] column_name column_type NOT NULL;
# DEFAULT
## MODIFTY
ALTER TABLE table_name MODIFY [COLUMN] column_name column_type DEFAULT default_value;
## ALTER
ALTER TABLE table_name ALTER column_name SET DEFAULT default_value;
# UNIQUE
ALTER TABLE table_name MODIFY [COLUMN] column_name column_type UNIQUE [KEY];
# PRIMARY KEY
ALTER TABLE table_name MODIFY [COLUMN] column_name column_type PRIMARY KEY;
# FOREIGN KEY
ALTER TABLE table_name DROP FOREIGN KEY symbol, ADD CONSTRAINT new_symbol FOREIGN KEY (column_name) REFERENCES another_table_name(column_name);
# CHECK
ALTER TABLE table_name MODIFY [COLUMN] column_name column_type CHECK (conditional_expr);
▼ 삭제
ALTER TABLE table_name DROP CONSTRAINT symbol;
# NOT NULL
ALTER TABLE table_name MODIFY [COLUMN] column_name column_type;
# DEFAULT
ALTER TABLE table_name ALTER column_name DROP DEFAULT;
# UNIQUE
ALTER TABLE table_name DROP INDEX index_name; /* UNIQUE 필드는 자동으로 인덱스(INDEX)로 만들어짐 */
# PRIMARY KEY
ALTER TABLE table_name DROP PRIMARY KEY;
# FOREIGN KEY
ALTER TABLE table_name DROP FOREIGN KEY symbol;
# CHECK
ALTER TABLE table_name DROP CHECK symbol;
● Index
▼ 생성
## CREATE INDEX
CREATE [UNIQUE] INDEX index_name ON table_name (column_name[, column_name...]);
## ALTER TABLE - ADD INDEX
ALTER TABLE table_name ADD {INDEX | KEY} [index_name] [index_type] (column_name[, column_name...]) [index_option] ...;
▼ 삭제
## DROP INDEX
DROP INDEX index_name ON tbl_name;
## ALTER TABLE - DROP INDEX
ALTER TABLE table_name DROP INDEX index_name;
ALTER TABLE table_name RENAME {INDEX | KEY} index_name TO new_index_name
https://dev.mysql.com/doc/refman/8.0/en/create-database.html
https://dev.mysql.com/doc/refman/8.0/en/create-table.html
https://dev.mysql.com/doc/refman/8.0/en/create-index.html
https://dev.mysql.com/doc/refman/8.0/en/alter-database.html
https://dev.mysql.com/doc/refman/8.0/en/alter-table.html
https://dev.mysql.com/doc/refman/8.0/en/drop-database.html
https://dev.mysql.com/doc/refman/8.0/en/drop-table.html
https://dev.mysql.com/doc/refman/8.0/en/drop-index.html
'프로그래밍 언어 ( Programming Language ) > SQL' 카테고리의 다른 글
[SQL][MySQL] 데이터 타입 ( Data Type ) (0) | 2022.01.05 |
---|---|
[SQL] 제약 조건 ( Constraint ) (0) | 2022.01.04 |
[SQL][MySQL] DML ( Data Manipulation Language ) - SELECT (0) | 2022.01.04 |
[SQL][MySQL] DML ( Data Manipulation Language ) - INSERT, UPDATE, DELETE (0) | 2022.01.04 |
[SQL] DB, DBMS, 관계형 데이터베이스 ( Relational Database ), SQL ( Structured Query Language ) (0) | 2022.01.04 |