[SQL] DDL의 모든 것

DDL은 Data Definition Language의 약자로, 데이터를 정의하는 명령어이다. DDL은 CREATE, ALTER, DROP, RENAME, TRUNCATE가 있다.
Hi's avatar
Aug 27, 2024
[SQL] DDL의 모든 것

💡
DDL은 Data Definition Language의 약자로, 데이터를 정의하는 명령어이다. DDL은 CREATE, ALTER, DROP, RENAME, TRUNCATE가 있다.
 

✅ 1. CREATE

☑️ 1) 사용법

CREATE TABLE 테이블명 ( 컬럼명1 데이터타입 제약조건, ... );
  • 컬럼명: 테이블의 컬럼 이름을 지정한다.
  • 데이터타입: 해당 컬럼의 데이터 유형을 지정한다.
  • 제약조건: default 값, null 허용 여부 등의 제약조건을 지정한다.
 

☑️ 2) 테이블 생성 법칙

📌
테이블 생성 시 지켜야 하는 규칙 7가지
  1. 테이블명은 고유해야 한다.
  1. 한 테이블 내에서 컬럼명은 고유해야 한다.
  1. 컬럼명 뒤에 데이터 유형과 데이터 크기가 명시되어야 한다.
  1. 컬럼에 대한 정의는 () 안에 기술한다.
  1. 각 컬럼들은 ,로 구분된다.
  1. 테이블명과 컬럼명은 숫자로 시작될 수 없다.
  1. 마지막은 ;로 끝난다.
 

☑️ 3) 제약 조건

PRIMARY KEY(기본키)
테이블에 저장된 각 행에 대한 고유성을 보장한다. 한 테이블에 1개만 설정 가능하고 NULL값이 입력될 수 없다.
UNIQUE KEY(고유키)
PRIMARY KEY와 유사하지만, NULL값이 입력될 수 있다는 차이가 있다.
FOREIGN KEY(외래키)
한 테이블이 다른 테이블을 참조할 때 사용한다.
NOT NULL
해당 컬럼에 NULL 값이 입력될 수 없도록 설정한다.
CHECK
해당 컬럼에 저장될 수 있는 값의 범위를 제한한다.
 
FOREIGN KEY 주의점
EMP 테이블의 deptno 컬럼이 DEPT 테이블의 deptno 컬럼을 참조하고 있을 때, EMP 테이블의 deptno 값은 DEPT 테이블의 deptno에 반드시 존재해야 한다.
이와 관련된 참조 무결성 제약 옵션은 아래와 같이 선택 가능하다.
CASCADE
Parent 값 삭제 시 Child 값도 같이 삭제
SET NULL
Parent 값 삭제 시 Child의 해당 컬럼 값으로 NULL 삽입
SET DEFAULT
Parent 값 삭제 시 Child의 해당 컬럼을 Default 값으로 설정
RESTRICT
Child 테이블에 해당 데이터가 PK로 존재하지 않는 경우에만 Parent 값 삭제 및 수정 가능
NO ACTION
참조 무결성 제약이 걸려있는 경우 삭제 및 수정 불가능
 

✅ 2. ALTER

💡
테이블의 구조를 변경할 때 사용하는 명령어이다.
보통, 한 번 생성된 테이블의 구조는 변경하지 않는 것이 일반적이지만, 불가피하게 변경을 해야 하는 경우가 발생할 수 있다.
 
기존 우편번호는 000-000 형식이었기 때문에 CODE1, CODE2 이렇게 두 개의 컬럼으로 나누어 저장하는 방식이 많았지만, 이제는 하나의 컬럼으로 통합하여 사용하는 추세이다.
 

☑️ 1) ADD COLUMN

💡
새로운 컬럼을 추가할 때 쓰는 명령어이다. 추가된 컬럼의 위치는 항상 맨 끝이며, 위치를 지정할 수 없다.
 
ALTER TABLE 테이블명 ADD 컬럼명 데이터유형;
 

☑️ 2) DROP COLUMN

💡
기존에 있던 컬럼이 필요 없어졌을 때 삭제하는 명령어이다. 한 번 삭제한 컬럼은 복구할 수 없으므로 주의하자!
 
ALTER TABLE 테이블명 DROP COLUMN 컬럼명;
 

☑️ 3) MODIFY COLUMN

💡
기존에 있던 컬럼을 변경할 때 사용한다.
 
변경할 때 주의할 점
  • 데이터 유형, DEFAULT 값, NOT NULL 제약조건 등에 대한 변경이 가능하다.
  • 컬럼에 저장된 모든 데이터의 크기가 줄이고자 하는 컬럼의 크기보다 작은 경우에만 줄일 수 있다.
  • 컬럼에 저장된 데이터가 없는 경우에만 데이터 유형을 변경할 수 있다.
  • DEFAULT 값 변경변경 이후 저장되는 데이터에만 적용된다.
  • 현재 NULL 값이 저장되어 있지 않은 컬럼에만 NOT NULL 제약 조건 추가가 가능하다.
  • 데이터 크기를 늘리는 것은 데이터와 상관없이 가능하다!
 
ALTER TABLE 테이블명 MODIFY (컬럼명1 데이터유형[DEFAULT 값] [NOT NULL], 컬럼명2, 데이터유형, ...);
 
 

☑️ 4) RENAME COLUMN

💡
기존에 있던 컬럼의 이름을 변경하고 싶을 때 사용한다.
 
ALTER TABLE 테이블명 RENAME COLUMN 기존컬럼명 TO 변경할컬럼명;
 

☑️ 5) ADD CONSTRAINT

💡
제약조건을 추가하고 싶을 때 사용하는 명령어이다.
 
ALTER TABLE 테이블명 ADD CONSTRAINT 제약조건명 제약조건 (컬럼명);
 

✅ 3. DROP TABLE

💡
테이블을 삭제할 때 사용하는 명령어이다.
 
만약, 해당 테이블을 참조하고 있는 다른 테이블이 존재하는 경우 CASCADE 옵션을 명시하지 않으면 삭제되지 않는다. CASCADE CONSTRAINT는 참조 제약조건도 함께 삭제한다는 의미이다.
 
DROP TABLE 테이블명 [CASCADE CONSTRAINT]
 
 

✅ 4. RENAME TABLE

💡
테이블명을 변경할 때 사용하는 명령어이다.
 
RENAME 기존테이블명 TO 변경할 테이블명;
 

✅ 5. TRUNCATE TABLE

💡
테이블에 저장되어 있는 데이터를 모두 제거하는 명령어이다.
 
DELETE 명령어와 유사하지만, 저장 공간이 재사용되도록 초기화한다는 차이점이 있고 ROLLBACK이 불가능하다. → DDL로 분류
 
TRUNCATE TABLE 테이블명;
Share article

soultree