데이터 정의어는 테이블이나 구조를 생성하는데 사용하는 명령어이다.
명령어로는 CREATE, ALTER, DROP 등이 있다.
• 데이터베이스와 테이블을 생성하는 명령어
• 테이블 이름, 열 이름, 데이터 형식 등을 지정
• 기본키, 외래키 정의
• 데이터베이스 생성 + 한글 인코딩
CREATE DATABASE new_smartfactory DEFAULT CHARACTER SET utf8mb4 DEFAULT COLLATE utf8mb4_unicode_ci;
• 테이블 생성
CREATE TABLE new_orders
(
orderid INT PRIMARY KEY AUTO_INCREMENT, -- PRIMARY KEY는 NOT NULL을 포함하고 있기 때문에 NOT NULL 생략 가능
custid CHAR(10) NOT NULL,
prodname CHAR(6) NOT NULL,
price INT NOT NULL,
amount SMALLiNT NOT NULL,
FOREIGN KEY(custid) REFERENCES new_customer(custid) ON UPDATE CASCADE ON DELETE CASCADE -- 외래키 설정
);
• MySQL에서 제공하는 데이터 타입은 매우 다양
• 자주 사용하는 형식 위주로 알아보자
숫자형
TINYINT (1 Byte) -128 ~ 127 정수
SMALLINT (2 Byte) -32768 ~ 32767 정수
INT (4 Byte) 약 -21억 ~ 21억 정수
BIGINT (8 Byte) 약 -900경 ~ 900경 정수
FLOAT (4 Byte) -3.40E+38 ~ -1.17E-38 소수점 아래 7자리까지 표현
문자형
CHAR(N) (1 ~ 255 Byte) 고정길이 문자형 / n을 1부터 255까지 지정
VARCHAR(N) (1 ~ 65535 Byte) 가변길이 문자형 / n을 1부터 65535까지 지정
TEXT (1 ~ 65535 Byte) 255 크기의 TEXT 데이터 값
MEDIUMTEXT (1 ~ 16777215 Byte) 16777215 크기의 TEXT 데이터 값
날짜형
DATE (3 Byte) 날짜 저장 (YYYY-MM-DD 형식)
TIME (3 Byte) 시간 저장 (HH:MM:SS 형식)
DATETIME (8 Byte) 날짜와 시간 저장 (YYYY-MM-DD HH:MM:SS 형식)
• 생성된 테이블의 속성과 속성에 대한 제약 및 기본키, 외래키를 변경
새로운 속성 추가
: 고객 테이블에 새로운 속성 "nickname"이 생겼음
ALTER TABLE 테이블명 ADD 속성이름 데이터타입;
Ex)
ALTER TABLE new_customer ADD nickname VARCHAR(10);
(1) 속성의 데이터 타입 수정
ALTER TABLE 테이블명 MODIFY 속성_이름 수정할_데이터_타입;
Ex)
ALTER TABLE new_customer MODIFY nickname INT;
(2) 속성명 변경
ALTER TABLE 테이블명 CHANGE 기존_이름 수정한_이름 데이터_타입;
Ex)
ALTER TABLE new_customer CHANGE nickname n_name VARCHAR(10);
속성의 데이터 타입 수정(MODIFY) 대신에 속성명 변경(CHANGE)를 사용해도 될 것 같다.
그래서 CHANGE를 사용하여 동일명으로 데이터 타입을 수정해보았다.
그 결과 정상적으로 잘 된다.
(만약 제가 잘못 알고 있는 거라면 지적 부탁드립니다.)
EX)
ALTER TABLE member MODIFY id VARCHAR(10);
ALTER TABLE member CHANGE id id VARCHAR(10);
-- 둘이 똑같이 작동
(3) 기존 속성 삭제
ALTER TABLE 테이블명 DROP 송성;
Ex)
ALTER TABLE new_customer DROP n_name;
• 생성된 테이블 삭제
• 주의) 테이블 구조와 데이터 모두 삭제
DROP TABLE 테이블이름;
Ex)
DROP TABLE new_customer;
예제 문제를 풀어보자.
CREATE TABLE new_user
(
id VARCHAR(10) PRIMARY KEY,
pw VARCHAR(20) NOT NULL,
name CHAR(5) NOT NULL,
gender CHAR(1),
birthday DATE NOT NULL,
age INT NOT NULL
);
DESC new_user;
CREATE TABLE member
(
id VARCHAR(20) PRIMARY KEY,
name VARCHAR(5) NOT NULL,
age INT,
gender VARCHAR(2) NOT NULL,
email VARCHAR(50),
promotion VARCHAR(2) DEFAULT "x"
);
DESC member;
-- (1) id 값 형식 변경
ALTER TABLE member MODIFY id VARCHAR(10);
ALTER TABLE member CHANGE id id VARCHAR(10); -- 위랑 같은 기능을 함.
-- (2) age 속성 삭제
ALTER TABLE member DROP age;
-- (3) interest 속성 추가
ALTER TABLE member ADD interest VARCHAR(100);
DESC member;
SELECT 문을 배울 떄 보다는 어렵지 않았다.
그렇지만 새로운 용어들이 많으니 방심하지 말자.
위 명령어들을 사용하면 GUI 뿐만 아니라 CMD, Git Bash에서도 테이블 생성/수정 등이 가능하니 잊지 말자.