조찬국 2024. 6. 26. 23:56
728x90

1. DDL(Data Definition Language)

💡 DDL(Data Definition Language)는 데이터베이스의 스키마를 정의하거나 수정하는 데 사용되는 SQL의 한 부분이다.

스키마(schema)
: 테이블의 구조(컬럼명, 자료형, 자료형 크기, 테이블명 등) 및 제약조건(unique, primary key, not null, check, foreign key 등)을 아우르는 말이다.

1-1. CREATE

  • 테이블 생성을 위한 구문
  • IF NOT EXISTS를 적용하면 기존에 존재하는 테이블이라도 에러가 발생하지 않는다.

  테이블의 컬럼 설정 방법

column_name data_type(length) [NOT NULL] [DEFAULT value] [AUTO_INCREMENT] column_constraint

 

1-1-1. 기본 문법

INSERT INTO tb1 VALUES (1, 10, 'Y');

SELECT * FROM tb1;

1-2. AUTO_INCREMENT

INSERT 시 PRIMARY키에 해당하는 컬럼에 자동으로 번호를 발생(중복되지 않게)시켜 저장할 수 있다.
CREATE TABLE IF NOT EXISTS tb2 (
    pk INT AUTO_INCREMENT PRIMARY KEY,
    fk INT,
    col1 VARCHAR(255),
    CHECK(col1 IN ('Y', 'N'))
) ENGINE=INNODB;

1-3. ALTER

테이블을 추가/변경/수정/삭제하는 모든 것은 ALTER 명령어를 사용한다.

1-3-1. 열 추가

ALTER TABLE tb2
ADD col2 INT NOT NULL;

DESCRIBE tb2;

 

1-3-2. 열 삭제

ALTER TABLE tb2
DROP COLUMN col2;

DESCRIBE tb2;

1-3-3. 열 이름 및 데이터 형식 변경

ALTER TABLE tb2
CHANGE COLUMN fk change_fk INT NOT NULL;

DESCRIBE tb2;

1-3-4. 열 제약 조건 추가 및 삭제

ALTER TABLE tb2
DROP PRIMARY KEY;    -- 에러 발생
에러 발새잉유: AUTO_INCREMENT가 걸려 있는 컬럼은 PRIMARY KEY 제거가 안되므로 AUTO_INCREMENT를 MODIFY 명령어로 제거한다.(MODIFY는 컬럼의 정의를 바꾸는 것이다.)

 

1-3-5. 컬럼 여러개 추가하기

ALTER TABLE tb2
ADD col3 DATE NOT NULL,			
ADD col4 TINYINT NOT NULL; 

DESC tb2;

1-4. DROP

테이블을 삭제하기 위한 구문

 

 tb3 테이블 생성 후 삭제

-- tb3 테이블 생성
CREATE TABLE IF NOT EXISTS tb3 (
  pk INT AUTO_INCREMENT PRIMARY KEY,
  fk INT,
  col1 VARCHAR(255),
  CHECK(col1 IN ('Y', 'N'))
) ENGINE=INNODB;

-- tb3 테이블 삭제
DROP TABLE IF EXISTS tb3;

 

1-5. TRUNCATE

논리적으로는 WHERE절이 없는 DELETE 구문과 큰 차이가 없어 보인다.
하지만 어차피 데이터를 다 삭제할 경우 행마다 하나씩 지워지는 DELETE보다 DROP이후 바로 테이블을 재생성 해주는 TRUNCATE가 훨씬 효율적으로 한번에 테이블을 초기화 시켜준다. 또한 AUTO_INCREMENT 컬럼이 있는 경우 시작 값도 0으로 초기화가 된다.

 

-- 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;    -- TABLE 키워드 생략 가능

728x90