
💡 DDL이란?
: 데이터 정의어로 테이블과 같은 데이터의 스키마를 정의하거나 수정하는데 사용되는 언어
: 스키마(schema) - 테이블의 구조(컬럼명, 자료형, 자료형 크기, 테이블명 등) 및 제약 조건(unique,primary_key, notnull, check, foreign_key)
: CREATE, ALTER, DROP, TRUNCATE, RENAME

💡 새로운 테이블을 생성하는 데에 사용
💡CREATE TABLE IF (NOT) EXISTS 테이블 명
💡 DESC 테이블 명
<코드>
-- 새로운 TABLE 생성
CREATE TABLE if NOT EXITSTS tbl(
pk INT PRIMARY KEY,
fk INT,
col1 VARCHAR(255),
CHECK(col1 IN ('Y','N'))
) ENGINE = INNODB;
-- 생성한 TABLE 조회
SELECT * FROM tb1;
<실행결과>

<코드>
-- 존재하는 테이블을 요약
DESC tb1;
DESCRIBE tb1;
<실행결과>

💡 제약조건으로 값을 기억해서 자동으로 추가해주는 경우에 사용
💡 INSERT 시 PRIMARY KEY 에 해당하는 컬럼에 자동으로 번호를 발생시켜 저장
<코드>
-- AUTO_INCREMENT: 값을 기억하는 번호 발생기
CREATE TABLE tb2 (
pk INT PRIMARY KEY AUTO_INCREMENT,
fk INT,
col1 VARCHAR(255),
CHECK(col1 IN ('Y', 'N'))
) ENGINE = INNODB;
-- 테이블의 속성 조회
DESC tb2;
<실행결과>

<코드>
-- INSERT 문을 2번 반복 실행
INSERT
INTO tb2
VALUES
(
NULL -- AUTO_INCREMENT를 적용
, 2
, 'N'
);
-- 실행 결과값 확인
SELECT * FROM tb2;
COMMIT;
<실행결과>

💡 컬럼, 제약조건등을 추가/변경/수정/삭제하는 경우에 사용
💡 경우의 수
1. 컬럼 추가: ALTER TABLE 테이블명 ADD 컬럼명 컬럼정의
2. 컬럼 삭제: ALTER TABLE 테이블명 DROP COLUMN 컬럼명
3. 컬럼 이름/데이터 형식 변경: ALTER TABLE 테이블명 CHANGE COLUMN 기존컬럼명 바꿀 컬럼명 컬럼정의
4. 컬럼 제약조건 추가/삭제: ALTER TABLE 테이블명 drop 제약조건
1)컬럼 추가
1-1) 컬럼 하나 추가
<코드>
-- 컬럼 추가
ALTER TABLE tb2 ADD col2 INT NOT NULL;
-- 조회
DESC tb2;
<실행결과>

1-2) 컬럼 여러개 추가
<코드>
-- 컬럼 여러개 추가
ALTER TABLE tb2
ADD col3 DATE NOT NULL,
ADD col4 TINYINT NOT NULL;
-- 조회
DESC tb2;
<실행결과>

2)컬럼 삭제
<코드>
-- 컬럼 삭제
ALTER TABLE tb2 DROP COLUMN col2;
-- 조회
DESC tb2;
<실행결과>

3) 컬럼 이름/ 컬럼 정의 변경
<코드>
-- 컬럼 이름 및 컬럼 정의 변경
ALTER TABLE tb2 CHANGE COLUMN fk change_fk INT NOT NULL;
-- 조회
DESC tb2;
<실행결과>

4) 컬럼 제약조건 추가/제거
4-1) 컬럼 제약조건 제거
<코드>
-- 제약조건 제거 (drop X -> modify)
-- AUTO_INCREMENT부터 수정 (INT AUTO_INCREMENT -> INT)
ALTER TABLE tb2 MODIFY pk INT;
-- PRIMARY KEY 제거
ALTER TABLE tb2 DROP PRIMARY KEY;
-- 조회
DESC tb2;
<실행결과>

4-2) 컬럼 제약조건 추가
<코드>
--제약조건 추가
-- PRIMARY KEY 추가
ALTER TABLE tb2
ADD PRIMARY KEY(pk);
-- AUTO_INCREMENT 추가
ALTER TABLE tb2 MODIFY pk AUTO_INCREMENT;
-- 조회
DESC tb2;
<실행결과>

💡 테이블을 삭제할 경우에 사용
💡 DROP TABLE IF EXISTS 테이블 명 (ex. tb3,tb4)
- 복수개의 테이블을 한번에 삭제도 가능
<코드>
-- 새로운 테이블 tb3 생성
CREATE TABEL IF NOT EXITS tb3 (
pk INT PRIMARY KEY ATUO_INCREMENT,
fk INT,
col1 VARCHAR(255),
CHECK(col1 IN ('Y','N'))
) ENGINE = INNODB;
-- DROP 문을 이용하여 tb3 제가
DROP TABEL IF EXISTS tb3;
<실행결과>

💡테이블을 초기화 하는 경우에 사용
💡 TRUNCATE (TABLE) 테이블 명
<코드>
-- tb6 테이블 생성
CREATE TABLE IF NOT EXISTS tb6 (
pk INT AUTO_INCREMENT PRIMARY KEY,
fk INT,
col1 VARCHAR(255),
CHECK(col1 IN ('Y', 'N'))
) ENGINE=INNODB;
-- 4개 행 데이터 INSERT
INSERT INTO tb6 VALUES (null, 10, 'Y');
INSERT INTO tb6 VALUES (null, 20, 'Y');
INSERT INTO tb6 VALUES (null, 30, 'Y');
INSERT INTO tb6 VALUES (null, 40, 'Y');
-- 제대로 INSERT 되었는지 확인
SELECT * FROM tb6;
-- 테이블 초기화 하기
-- TRUNCATE (TABLE) tb6;
TRUNCATE tb6;
<실행결과>
