본문 바로가기
데이터베이스

[Database] DDL(Data Definition Language)

by 나는 유찌 2020. 2. 22.

 

1. 자주 쓰이는 데이터 유형

 

CHARACTER(s)

- 고정 길이 문자열 정보.

- s는 기본 길이 1바이트, 최대 길이 Oracle 2000바이트, SQL Server 8000 바이트

VARCHAR(s)

- 가변 길이 문자열 정보(Oracle은 VARCHAR2로 표현, SQL Server는 VARCHAR로 표현)

- s는 최소 길이 1바이트, 최대 길이 Oracle 4000 바이트, SQL Server 8000 바이트

- s만큼의 최대 길이를 갖지만 가변 길이로 조정이 되기 때문에 할당된 변수 값의 바이트만 적용

NUMERIC

- 정수, 실수 등 숫자 정보 (Oracle은 NUMBER로, SQL Server는 10가지 이상의 숫자 타입을 가짐)

- Oracle은 처음에 전체 자리 수를 지정하고, 그 다음 소수 부분의 자리 수를 지정.

- 예를 들어, 정수 부분이 6자리이고 소수점 부분이 2자리인 경우에는 'NUMBER(8, 2)'

DATE

- 날짜와 시각 정보

- Oracle은 1초 단위, SQL Server는 3.33ms 단위 관리

 

 

* CHAR 유형과 VARCHAR 유형 중 어느 유형을 어떤 상황에 지정해야 할까?

 

1) 저장영역

VARCHAR 유형은 가변 길이이므로 필요한 영역은 실제 데이터 크기뿐이다.

그렇기 때문에 길이가 다양한 칼럼과, 정의된 길이와 실제 데이터 길이에 차이가 있는 칼럼에 적합하다.

저장 측면에서도 CHAR 유형보다 적은 영역에 저장 할 수 있다는 장점을 가진다.

 

2) 비교방법

CHAR은 문자열을 비교할 때 공백을 채워서 비교한다. 문자 길이가 짧은 쪽 끝에 공백을 추가하여 2개의 데이터가 같은 길이가 되도록 한 다음에 비교를 하게 된다. 그러므로 끝의 공백만 다른 문자열은 같다고 판단한다.

VARCHAR에서는 맨 처음부터 한 문자씩 비교하고 공백도 하나의 문자로 취급하므로 끝의 공백이 다르며 다른 문자로 판단하게 된다.

 

Ex1) CHAR 경우

'AA' = 'AA '

 

Ex2) VARHCAR 경우

'AA' != 'AA '

 

 

 

 

2. CREATE TABLE

 

 

1) 구문

CREATE TABLE [테이블이름] (

칼럼명1 DATATYPE [DEFAULT 형식],

칼럼명2 DATATYPE [DEFAULT 형식],

칼럼명3 DATATYPE [DEFAULT 형식]

);

 

2) 테이블 생성 시 주의해야 할 규칙

- 테이블 명은 객체를 의미할 수 있는 적절한 이름을 사용한다. 가능한 단수형을 권고한다.

- 테이블 명은 다른 테이블의 이름과 중복되어서는 안 된다.

- 한 테이블 내에서 칼럼명이 중복되어서는 안 된다.

- 테이블 이름을 지정하고 각 칼럼들은 괄호 "()"로 묶어 지정한다.

- 각 칼럼들은 콤마 ", "로 구분하고, 테이블 생성문의 끝은 항상 세미콜론 ";"으로 끝난다.

- 칼럼에 대해서는 다른 테이블까지 고려하여 데이터베이스 내에서 일관성 있게 사용하는 것이 좋다.

- 테이블 생성시 대/소문자 구분은 하지 않는다. 기본적으로 테이블이나 칼럼명은 대문자로 만들어진다.

- DATETIME 데이터 유형에는 별도로 크기를 지정하지 않는다.

- 칼럼에 대한 제약조건이 있으면 CONSTRAINT를 이용하여 추가할 수 있다.

 

3) 제약조건(CONSTRAINT)

- 데이터와 무결성을 유지하기 위한 데이터베이스의 보편적인 방법으로 테이블의 특정 칼럼에 설정하는 제약.

 

4) 제약조건 종류

PRIMARY KEY

(기본키)

- 테이블에 저장된 행 데이터를 고유하게 식별하기 위한 기본키를 정의한다.

- 하나의 테이블에 하나의 기본키 제약만 정의할 수 있다.

- 기본키 제약을 정의하면 DBMS는 자동으로 UNIQUE 인덱스를 생성하며, 기본키를 구성하는 칼럼에는 NULL을 입력할 수 없다.

UNIQUE KEY

(고유키)

- 테이블에 저장된 행 데이터를 고유하게 식별하기 위한 고유키를 정의한다.

- NULL은 고유키 제약의 대상이 아니다.

NOT NULL - NULL 값의 입력을 금지한다.
CHECK

- 입력할 수 없는 값의 범위 등을 제한한다.

- CHECK 제약으로는 TRUE OR FALSE로 평가할 수 있는 논리식을 지정한다.

FOREIGN KEY

(외래키)

- 관계형 데이터베이스에서 테이블 간의 관계를 정의하기 위해 기본키를 다른 테이블의 외래키로 복사하는 경우 외래키가 생성.

- 외래키 지정시 참조 무결성 제약 옵션을 선택할 수 있다.

 

 

 

3. ALTER TABLE

 

 

1) ADD COLUMN 구문

ALTER TABLE [테이블명]

ADD [추가할 칼럼명] [데이터 유형];

 

2) DROP COLUMN 구문

 

ALTER TABLE [테이블명]

DROP COLUMN [삭제할 칼럼명];

 

3) MODIFY COLUMN 구문

 

ALTER TABLE [테이블명]

MODIFY ( [칼럼명] [데이터 유형] [DEFAULT 식] [NOT NULL] );

 

4) 고려 사항

- 기존의 데이터가 훼손될 수 있기 때문에 해당 칼럼의 크기를 늘릴 수는 있지만 줄이지는 못한다.

- 해당 칼럼이 NULL 값만 가지고 있거나 테이블에 아무 행도 없으면 칼럼의 폭을 줄일 수 있다.

- 해당 칼럼이 NULL 값만을 가지고 있으면 데이터 유형을 변경할 수 있다.

- 해당 칼럼의 DEFAULT 값을 바꾸면 변경 작업 이후 발생하는 행 삽입에만 영향을 미치게 된다.

- 해당 칼럼에 NULL 값이 없을 경우에만 NOT NULL 제약 조건을 추가할 수 있다.

 

5) RENAME COLUMN 구문

ALTER TABLE [테이블명]

RENAME COLUMN [변경해야 할 칼럼명 TO 새로운 칼럼명];

 

6) DROP CONSTRAINT 구문

ALTER TABLE [테이블명]

DROP CONSTRAINT [제약조건명];

 

7) ADD CONSTRAINT 구문

ALTER TABLE [테이블명]

ADD CONSTRAINT [제약 조건명] [제약조건] [칼럼명];

 

EX)

ALTER TABLE PLAYER

ADD CONSTRAINT PLAYER_FK

FOREIGN KEY (TEAM_ID) REFERENCES TEAM(TEAM_ID);

 

제약 조건명 : PLAYER_FK

PLAYER 테이블의 TEAM_ID 칼럼이 TEAM 테이블의 TEAM_ID를 참조하는 조건.

 

참조 제약조건을 추가하면 PLAYER 테이블의 TEAM_ID 칼럼이 TEAM 테이블의 TEAM_ID 칼럼을 참조하게 된다.

참조 무결성 옵션에 따라 만약 TEAM 테이블이나 TEAM 테이블의 데이터를 삭제하려 할 경우 외부 (PLAYER 테이블)에서 참조되고 있기 때문에 삭제가 불가능하게 제약을 할 수가 있다.

 

 

 

4. RENAME TABLE 구문

RENAME [변경전 테이블명 TO 변경후 테이블명];

 

 

 

5. DROP TABLE 구문

DROP TABLE [테이블명] [CASCADE CONSTRAINT];

 

- CASCADE CONSTRAINT : 해당 테이블과 관계가 있었던 참조되는 제약조건에 대해서도 삭제된다는 의미.

- SQL Server에서는 CASCADE 옵션이 존재하지 않으며 테이블을 삭제하기 전에 참조하는 FOREIGN KEY 제약 조건 또는 참조하는 테이블을 먼저 삭제해야 한다.

 

 

 

6. TRUNCATE TABLE 구문

TRUNCATE TABLE [테이블명];

'데이터베이스' 카테고리의 다른 글

1. 데이터베이스의 개념  (0) 2020.05.31
트랜잭션(Transaction)  (0) 2020.03.28
[Database] RDBMS, NoSQL, In-memory Database  (0) 2020.03.10
[MySQL] time zone 변경  (0) 2020.02.23
[Database] DML(Data Manipulation Language)  (0) 2020.02.22