데이터 정의어(DDL)은 스키마 객체를 생성, 변경, 제거시 사용한다. 이때 스키마 객체에는 테이블 뿐만 아니라 데이터베이스에서 제공하는 뷰, synonym index 등 다양한 객체들이 포함된다. DDL은 이러한 객체들을 생성, 변경, 제거할 때 사용되게 된다.
MySQL Data Type
테이블을 선언할 때 column에 어떤 타입의 데이터를 사용할 지를 지정해야 한다. 따라서 MySQL에서 제공하는 Data Type에 대해 알아둘 필요가 있다. MySQL은 다음과 같은 Data Type을 제공한다.
숫자형 데이터 타입
Type | Description |
Tinyint(M) | 1Byte로 정수를 표현하며 부호가 있는 타입과 없는 타입이 존재한다. |
Smallint(M) | 2Byte로 정수를 표현하며 부호가 있는 타입과 없는 타입이 존재한다. |
Mediumint(M) | 3Byte로 정수를 표현하며 부호가 있는 타입과 없는 타입이 존재한다. |
Int(M) & Integer(M) | 4Byte로 정수를 표현하며 부호가 있는 타입과 없는 타입이 존재한다. |
Bigint(M) | 8Byte로 정수를 표현하며 부호가 있는 타입과 없는 타입이 존재한다. |
Decimal(M: 길이, D: 소수) | 고정 소수점을 나타낸다. 이때 M은 0~65 사이의 수여야 한다. |
Float(M: 길이, D: 소수) | 부동 소수점을 나타낸다. (4Byte) |
Double(M: 길이, D: 소수) | 부동 소수점을 나타낸다. Float에 비해 2배의 정밀도를 가진다. (8Byte) |
문자형 데이터 타입
Type | Description |
Char(M) | 고정 길이를 가지는 문자열을 저장한다. M은 0~255 사이의 수여야 한다. |
Varchar(M) | 가변 길이를 가지는 문자열을 저장할 수 있다. M은 0~65,535 사이의 수여야 한다. |
Tinytext | 문자열 데이터 타입으로 최대 255개의 문자를 저장할 수 있다. |
Text | 문자열 데이터 타입으로 최대 63,535개의 문자를 저장할 수 있다. |
Mediumtext | 문자열 데이터 타입으로 최대 16,777,215개의 문자를 저장할 수 있다. |
Longtext | 문자열 데이터 타입으로 최대 4,294,967,295개의 문자를 저장할 수 있다. |
날짜형 데이터 타입
Type | Description |
Date | '2022-10-31'과 같이 날짜를 표현한다. (3Byte) |
Datetime | '2022-10-31 23:59:59'와 같이 날짜와 시간을 동시에 표현한다. (8Byte) |
Timestamp | '1970-01-01 00:00:00'~2037년까지 나타낼 수 있다. (4Byte) |
Time | '-839:59:59~+839:59:59'까지의 시간을 나타낼 수 있다. (3Byte) |
Year | 0000년, 1901~2155년까지의 년도를 나타낼 수 있다. (1Byte) |
위 타입들 이외에도 Blob과 같이 이진 데이터를 나타내는 다른 데이터 타입들도 존재한다.
테이블 생성 (Create)
테이블을 생성하기 위해서는 아래와 같은 구조를 가진 Create문을 사용한다.
create table (Table_Name) (
(Column1_Name) (Data_Type) ([NULL/Not NULL]) ([DEFAULT]) ([Auto_Increment]) [Primary key],
(Column2_Name) (Data_Type) ([NULL/Not NULL]) ([DEFAULT]) ([Auto_Increment]),
(Column3_Name) (Data_Type) ([NULL/Not NULL]) ([DEFAULT]) ([Auto_Increment]),
...
);
테이블을 생성할 때는 위와 같이 각 column의 이름과 어떤 타입을 가질지 정의해야 한다. 이때 해당 column에 제약 조건을 추가로 부여할 수 있다. 예를 들어서, Null 값을 허용할 수도 있고, 혀용하지 않을 수도 있으며 Default값을 지정하거나 자동으로 값이 늘어나게 하는 등의 옵션을 추가할 수 있다. primary key도 설정이 가능한데, 이때 두 개의 primary key 설정시에는 에러가 발생한다.
- Ex) create table book (Book_name varchar(10) not null primary key, Author varchar(10) not null, Price integer not null);
테이블 수정 (Alter)
테이블을 수정할 때는 Alter문을 사용한다.
Column 추가, 삭제(add, drop)
Alter문에 add을 사용하면 column을 추가할 수 있고, drop을 사용하면 column을 제거한다. add의 경우 table 생성과 동일하게 column의 이름, 저장할 타입 그리고 제약 조건 등을 작성해주면 된다.
- Add Ex) alter table book add company varchar(10) null;
- Drop Ex) alter table book drop company;
alter table (Table_Name) add (Column_Name) (Data_Type) ([NULL/Not NULL]) ([DEFAULT]) ([Auto_Increment]);
alter table (Table_Name) drop (Column_Name);
Column 수정(change)
Alter문에 change 키워드를 사용하면 column을 새롭게 재정의할 수 있다.
alter table (Table_Name) change (Column_Name) (New_Name) (Date_Type) ([NULL/Not NULL]) ([DEFAULT]) ([Auto_Increment]);
테이블 이름 변경(rename)
alter 키워드를 사용하면 테이블의 이름을 변경할 수 있다.
alter table (Table_Name) rename (New_Name);
테이블 삭제 (Drop)
Drop문을 사용하면 테이블을 삭제할 수 있다. 단, 테이블들이 서로 관련되어 있는 경우 생성한 순의 반대 순으로 삭제해야 한다. 예를들어, table1과 table2가 있는데 table1의 하나의 column값들이 table2의 어떠한 column에 사용된다고 하자. 이때 table1을 먼저 삭제하는 경우 문제가 발생할 수 있다. 따라서 만약 table1을 삭제하고 싶다면 table2를 먼저 삭제해야 한다.
drop table (Table_Name);
'DB > MySQL' 카테고리의 다른 글
[MySQL] MySQL 버전 확인 방법 (0) | 2023.01.27 |
---|---|
[MySQL] 유저 조회 방법 (0) | 2022.12.26 |
2-3. DML(Insert, Update, Delete) (0) | 2022.10.31 |
2-2. DML(Select, 그룹 함수) (0) | 2022.10.31 |
2-1. DML (Select, 단일 함수) (0) | 2022.10.27 |