[SQL][MySQL] DDL ( Data Definition Language ) - CREATE, ALTER, DROP, RENAME

728x90

 

< 주석 >

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

 

 

반응형