[SQLD] DDL 정리 (CREATE, DROP, ALTER, RENAME, TRUNCATE)

icebox127·2025년 9월 27일

SQLD

목록 보기
5/8

DDL

데이터 정의어 data definition language

1. 데이터 유형

데이터의 유형은 데이터베이스의 테이블에 특정 자료를 입력할 때, 그 자료를 받아들일 공간을 자료의 유형별로 나누는 기준이라고 생각하면 된다.

즉, 칼럼을 정의할 때 선언한 데이터 유형은 그 칼럼의 자료 유형을 규정하며, 다른 종류의 데이터가 들어오려고 하면 데이터는 에러를 발생시킨다.

데이터 유형설명
CHARACTER(s)고정 길이 문자열 정보(oracle, SQL Server 모두 CHAR로 표현). s는 기본 길이 1 바이트, 최대 길이 Oracle 2000바이트, SQL Server 8000 바이트. s만큼 최대 길이를 갖고 고정 길이를 가지고 있으므로 해당 할당된 변수값의 길이가 s보다 작을 경우에는 그 차이 길이만큼 공간으로 채워진다.
VARCHAR(s)CHARACTER VARING의 약자로 가변 길이 문자열 정보(Oracle은 VARCHAR2로 표현, SQL Server는 VARCHAR로 표현). s는 최소 길이 1 바이트, 최대 길이 Oracle 4000 바이트, SQL Server 8000 바이트. s만큼 최대 길이를 갖지만 가변 길이로 조정이 되기 때문에 해당 할당된 변수값의 바이트만 적용된다. (Limit 개념)
NUMERIC정수, 실수 등 숫자 정보(Oracle은 NUMBER로, SQL Server는 10가지 이상의 숫자 타입을 가지고 있음). Oracle은 처음에 전체 자리 수를 지정하고, 그 다음 소수 부분의 자리 수를 지정한다. 예를 들어, 정수 부분이 6자리이고 소수점 부분이 2자리인 경우에는 NUMBER(8,2)
DATETIME날짜와 시각 정보(Oracle은 DATE로 표현, SQL Server는 DATETIME으로 표현). Oracle은 1초 단위, SQL Server는 3.33ms 단위로 관리

VARCHAR와 CHAR의 차이

  • VARCHAR
    • 가변 길이 문자열
    • 필요한 영역 = 실제 데이터 크기
  • CHAR
    • 고정 길이 문자열

두 문자열을 비교할 때, CHAR에서는 공백을 채워서 비교하는 방법 사용

따라서 뒤 공백만 다르고 앞 부분이 같으면 같은 문자열로 취급

예) CHAR 유형 ‘AA’ = ‘AA ‘

하지만 VARCHAR 유형은 맨 처음부터 한 문자씩 비교하고 공백도 하나의 문자로 취급하므로 끝의 공백이 다르면 다른 문자로 판단

예) VARCHAR 유형 ‘AA’ <> ‘AA ‘

2. CREATE TABLE

테이블 생성 규칙

CREATE TABLE 테이블이름{
	칼럼명1 DATATYPE [DEFAULT 형식],
	칼럼명2 DATATYPE [DEFAULT 형식],
	칼럼명3 DATATYPE [DEFAULT 형식],
	CONSTRAINT 제약조건명 PRIMARY KEY (칼럼명),
	CONSTRAINT 제약조건명 FOREIGN KEY (칼럼명)
};
  • 테이블명은 객체를 의미할 수 있는 적절한 이름을 사용한다 (단수명 권고)
  • 테이블명은 다른 테이블의 이름과 중복되지 않아야 한다.
  • 한 테이블 내에서는 칼럼며잉 중복되게 지정될 수 없다.
  • 테이블 이름을 지정하고 각 칼럼들은 괄호로 묶어 지정한다.
  • 각 칼럼들은 콤마로 구분되고, 항상 끝은 세미콜론으로 끝난다.
  • 칼럼에 대해서는 다른 테이블까지 고려하여 데이터베이스 내에서는 일관성 있게 사용하는 것이 좋다. (데이터 표준화 관점)
  • 칼럼 뒤에 데이터 유형은 꼭 지정되어야 한다.
  • 테이블명과 칼럼명은 반드시 문자로 시작해야 하고, 벤더별로 길이에 대한 한계가 있다.
  • 벤더에서 사전에 정의한 예약어는 쓸 수 없다.
  • A-Z, a-z, 0-9, _, $, # 문자만 허용된다.
    • 테이블명 잘못된 사례
      10_PLAYER반드시 문자로 시작해야 함
      T-PLAYER특수 문자 ‘-’는 허용되지 않음

NULL의 의미

NULL은 공백이나 숫자 0과는 전혀 다른 값이며, 조건에 맞는 데이터가 없을 때의 공집합과도 다르다. ‘NULL’은 ‘아직 정의되지 않은 미지의 값’이거나 ‘현재 데이터를 입력하지 못하는 경우’를 의미한다

DEFAULT 의미

데이터 입력 시에 칼럼의 값이 지정되어 있지 않을 경우 기본값을 사전에 설정할 수 있다. 입력시 명시된 값을 지정하지 않은 경우에 NULL값이 입력되고, DEFAULT 값을 정의했다면 해당 칼럼에 NULL값이 입력되지 않고 사전에 정의된 기본 값이 자동으로 입력된다.

)
CREATE TABLE STUDENT{
		STUDENT_ID  CHAR(8) NOT NULL,
		NAME        VARCHAR(10) NOT NULL,
		DEPT_ID     VARCHAR(20) NOT NULL,
		GRADE       NUMERIC,
		ADDRESS     VARCHAR(40)
		CONSTRAINT STUDENT_PK PRIMARY KEY (STUDENT_ID),
		CONSTRAINT STUDENT_FK FOREIGN KEY (DEPT_ID) REFERENCES DEPARTMENT(DEPT_ID)
}

CTAS

Create Table As Select

기존 테이블을 활용하여 새 테이블을 생성하는 것

CREATE TABLE STUDENT_TEMP
AS SELECT * FROM STUDENT;

3. ALTER TABLE

ALTER TABLE로 테이블의 구조를 변경할 수 있다.

ADD COLUMN

새로운 칼럼을 추가. 새 칼럼은 테이블의 마지막 칼럼이 되며 칼럼의 위치를 지정할 순 없다.

 ALTER TABLE 테이블명
 ADD COLUMN 추가할_칼럼명 데이터_유형;)
 ALTER TABLE STUDENT
 ADD COLUMN (ACCOUNT VARCHAR(20));

DROP COLUMN

한 번에 하나의 칼럼만 삭제 가능하며, 칼럼 삭제 후 최소 하나 이상의 칼럼이 테이블에 존재해야 한다. 주의할 부분은 한 번 삭제된 칼럼은 복구가 불가능하다.

 ALTER TABLE 테이블명
 DROP COLUMN 삭제할_칼럼명;)
 ALTER TABLE STUDENT
 DROP COLUMN ADDRESS;

MODIFY COLUMN

테이블에 존재하는 칼럼에 대해서 MODIFY COLUMN 명령을 이용해 칼럼의 데이터 유형, 디폴트 값, NOT NULL 제약조건에 대한 변경을 포함할 수 있다.

 ALTER TABLE 테이블명
 MODIFY COLUMN (칼럼명1 데이터_유형 [DEFAULT] [NOT NULL],
 							칼럼명2 데이터_유형 [DEFAULT] [NOT NULL]...);)
 ALTER TABLE STUDENT
 MODIFY COLUMN (DEPT VARCHAR(15) DEFAULT "학과정보 없음" NOT NULL);

RENAME COLUMN

RENAME COLUMN으로 칼럼명이 변경되면, 해당 칼럼과 관계된 제약조건에 대해서도 자동으로 변경되는 장점이 있지만, ADD/DROP COLUMN 기능처럼 ANSI//ISO에 명시되어 있는 기능이 아니고 Oracle 등 일부 DBMS에서만 지원하는 기능이다.

 ALTER TABLE 테이블명
 RENAME COLUMN 변경할_칼럼명 TO 새_칼럼명
 
 예)
 ALTER TABLE STUDNET
 RENAME COLUMN ACCOUNT TO BANK_ACCOUNT;

DROP CONSTRAINT

테이블 생성 시 부여했던 제약조건을 삭제

 ALTER TABLE 테이블명
 DROP CONSTRAINT 제약조건명;)
 ALTER TABLE STUDENT
 DROP CONSTRAINT STUDENT_FK;

ADD CONSTRAINT

테이블 생성 이후에 필요에 의해서 제약조건을 추가

 ALTER TABLE 테이블명
 ADD CONSTRAINT 제약조건명 제약조건 (칼럼명);)
 ALTER TABLE STUDENT
 ADD CONSTRAINT STUDENT_FK  FOREIGN KEY (DEPT_ID) REFERENCES DEPT (DEPT_ID);

4. RENAME TABLE

RENAME 명령어를 사용하여 테이블의 이름을 변경할 수 있다

RENAME 변경전_테이블명 TO 변경후_테이블명

예)
RENAME STUDENT TO SWU_STUDENT;

5. DROP TABLE

DROP TABLE로 테이블 삭제할 수 있다

DROP TABLE 테이블명 [CASCADE CONSTRAINT];)
DROP TABLE STUDENT;
  • CASCADE CONSTRAINT 테이블과 관계가 있었던 참조되는 제약조건에 대해서도 삭제

6. TRUNCATE TABLE

TRUNCATE TABLE은 테이블 내부의 모든 행이 제거되고 저장공간을 재사용 가능하도록 해제된다.

TRUNCATE TABLE STUDENT;

실행 후에도 DESC TEAM을 실행시키면 여전히 칼럼과 데이터 유형, NOT NULL 등 테이블 구조가 나오며, 오직 저장된 데이터(행)만이 삭제된다.

TRUNCATE TABLE은 DDL처럼 튜플을 삭제하지만, 내부처리 방식이나 Auto Commit 특성 등으로 인해 DDL로 분류된다.

  • DELETE와의 차이점 둘 다 행을 삭제하나, TRUNCATE TABLE은 DDL이라 자동으로 커밋, 반영되어 복구가 불가하다. 하지만 DELETE은 DML이라 커밋을 해야만 반영이 되어, 롤백으로 복구가 가능하다. 시스템 활용 측면에서는 시스템 부하가 적은 TRUNCATE TABLE이 권고되나 정상적인 복구가 불가능하므로 주의해야 한다.
profile
감자의 공부기록🥔

0개의 댓글