카테고리 없음

DDL로 테이블 생성 / 변경 / 삭제

lily_y 2023. 10. 19. 14:21

DATA DEFINITION LANGUAGE 로 데이터 정의 언어

 

 

소수점 자리를 명시를 해야함 (안그러면 반올림되서 소수점자리는 출력이 안됨)

   -n은 n의 자리에서 반올림해라 (-2면 정수 두번째자리에서)

 

* 변경안되는 함수를 주의하자

 

데이터 유형

 

 

데이터베이스의 테이블에 특정 자료를 입력할 때, 그 자료를 받아들일 공간을 자료의 유형별로 나누는 기준을 의미합니다.

 

테이블의 칼럼이 가지고 있는 대표적인 4가지 데이터 유형은 다음과 같습니다.

1. CHARACTER : 고정 길이 문자열 정보 (2000자 까지 저장됨)

2. VARCHAR : 가변길이 문자열 정보  (4000자 까지 저장되므로, 부족하다면 LONG 이나 LOB를 사용할 것)

3. NUMERIC : 정수, 실수 등 숫자 정보

4. DATE : 날짜와 시각 정보

 

이 외에도 Binary String Type, Binary Large Object String Type, National Character String Type, Boolean Type 등의 유형이 있습니다.

벤더사별로 표준을 따르지만 이외에 대해서는 특성에 맞추므로 타입이나 쿼리가 다를 수 있습니다.

 

 

CREATE TABLE


 

테이블은 일정한 형식에 의해서 생성됩니다.

생성을 위해서는 해당 테이블에 입력될 데이터를 정의하고, 어떠한 유형으로 선언할 것인지를 결정해야 합니다.

데이터를 고유하게 식별할 수 있으면서 반드시 값이 존재하는 단일 컬럼이나 후보키 중에 하나를 선정하여 기본키 컬럼으로 지정합니다.

기본키는 단일 컬럼이 아닌 여러개의 컬럼으로도 만들 수 있습니다.

 

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

1. 객체를 의미할 수 있는 적절한 이름을 사용

2. 다른 테이블의 이름과 중복되지 않도록 지정

3. 한 테이블 내에서는 컬럼명이 중복되게 지정할 수 없음

4. 테이블 이름을 지정하고 각 컬럼들은 괄호로 묶어서 지정

5. 각 컬럼들은 , 로 구분되고, 테이블 생성문의 끝은 ; 기호로 맺음

6. 컬럼뒤에 데이터 유형은 꼭 지정되어야 함

7. 테이블 명과 컬럼 명은 반드시 문자로 시작

8. 벤더사마다 사전에 정의한 예약어는 사용 불가

9, A-Z, a-z, 0-9, _, $, # 문자만 허용

 

컬럼에 대한 규칙

1. DATETIME 유형에는 별도로 크기를 지정하지 않음

2. 문자 데이터 유형은 반드시 가질 수 있는 최대 길이를 표시

3. 컬럼의 구분은 , 로 하되 마지막 컬럼은 콤마를 찍지 않음

4. 컬럼에 대해서 CONSTRAINT 를 이용하여 제약조건을 추가 가능

 

테이블에 대한 생성 예제

테이블 명 : MOZI
컬럼 명   : ID (아이디) 문자 가변 자릿수 7자리
            NAME (이름) 문자 가변 자릿수 20자리
            AGE (나이)  숫자 3자리
제약조건  : 기본키(PRIMARY KEY) -> ID
            값이 반드시 존재 (NOT NULL) -> NAME
CREATE TABLE MOZI (
  ID    VARCHAR(7),
  NAME  CHAR(20) NOT NULL,
  AGE   NUMBER(3),
  CONSTRAINT PLAYER_PK PRIMARY KEY (ID) );

 

SELECT 문장을 통한 테이블 생성

 

CTAS (CREATE TABLE AS SELECT) 를 통하여 테이블을 생성할 수 있습니다.

그러나 이 때에는 제약조건 중 NOT NULL 만 복제 테이블에 적용이 되고, 나머지 제약조건을 복사되지 않습니다.

 

제약조건

 

사용자가 원하는 조건의 데이터만 유지하기 위한 즉, 데이터의 무결성을 유지하기 위한 제약사항입니다.

 

제약조건의 종류

 

 구분  설명
 PRIMARY KEY  테이블에 저장된 행 데이터를 고유하게 식별하기 위한 기본키를 정의한다.
 하나의 테이블에는 하나의 기본키 제약만 정의할 수 있다.
 정의 시 자동으로 UNIQUE 인덱스를 생성하며, NULL 값이 올 수 없다.
 UNIQUE KEY  테이블에 저장된 행 데이터를 고유하게 식별하기 위한 고유키를 정의한다.
 단, NULL 은 고유키 제약의 대상이 아니므로 NULL 행은 여러개가 될 수 있다.
 NOT NULL  NULL 값의 입력을 금지한다.
 CHECK  입력할 수 있는 값의 범위 등을 제한한다.
 FOREIGN KEY  테이블 간의 관계를 정의하기 위해 기본키를 다른 테이블의 외래키로 복사하는 경우를 의미한다.
 DEFAULT  DEFAULT 값을 정의시 컬럼에 데이터값이 입력되지 않은 경우 정의된 값이 자동으로 입력된다.

 

 

 

 

 


ALTER TABLE


 

작업을 하다보면 변경해야 할 일들이 발생할 수도 있다. 이럴때는 주로 

  • 칼럼을 추가/삭제
  • 제약조건을 추가/삭제

 

컬럼 추가

 

새롭게 추가된 컬럼은 테이블의 마지막 컬럼이 되며 위치를 지정할 순 없다.

 

ALTER로 새로운 칼럼 추가

 

 

컬럼 제거

 

데이터가 있거나 없거나 삭제가 가능하다..

한 번에 하나의 컬럼만 삭제가 가능하며,

컬럼 삭제 후 최소 하나 이상의 컬럼이 테이블에 존재해야 한다! 

한 번 삭제한 컬럼은 복구가 불가능 하므로 주의해야 합니다.

ALTER TABLE <TABLE_NAME> DROP COLUMN <COLUMN_NAME>; -- ORACLE, MS-SQL
ALTER TABLE <TABLE_NAME> SET UNUSED COLUMN <COLUMN_NAME>; -- GOLDILOCKS

 

컬럼 수정

MODIFY

데이터 타입, 크기, 디폴트, NOT NULL 제약조건 등에 대한 변경을 할 수 있다.

 

컬럼을 변경할 때는 다음을 고려해야 합니다.

1. 컬럼의 크기를 늘릴 수는 있지만 줄이지는 못한다.

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

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

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

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

 

 

컬럼 명 변경

ALTER TABLE <TABLE_NAME> RENAME COLUMN <COLUMN_NAME> TO <NEW_COLUMN_NAME>; -- ORACLE, GOLDILOCKS
sp_rename <COLUMN_NAME>, <NEW_COLUMN_NAME>, 'COLUMN'; --MS-SQL

 

제약조건 삭제

ALTER TABLE <TABLE_NAME> DROP CONSTRAINT <CONSTRAINT_NAME>; -- ORACLE, MS-SQL, GOLDILOCKS

 

제약조건 추가

ALTER TABLE <TABLE_NAME> ADD CONSTRAINT <CONSTRAINT_NAME> <CONSTRAINT_TYPE> (<COLUMN_NAME>); -- ORACLE, MS-SQL, GOLDILOCKS

 

 

RENAME TABLE


 

테이블 명을 변경합니다.

RENAME <TABLE_NAME> TO <NEW_TABLE_NAME>; -- ORACLE
sp_rename <TABLE_NAME>, <NEW_TABLE_NAME>; -- MS-SQL
ALTER TABLE <TABLE_NAME> RENAME TO <NEW_TABLE_NAME>; -- GOLDILOCCKS

 

 

DROP TABLE


 

테이블을 잘못 만들었거나 테이블이 더 이상 필요 없을 경우 해당 테이블을 삭제합니다.

DROP TABLE <TABLE_NAME>; -- ORACLE, MS-SQL, GOLDILOCKS

 

 

TRUNCATE TABLE


테이블 자체가 삭제되는 것이 아니고, 해당 테이블에 들어있단 모든 행들이 제거됩니다.

또한 저장 공간을 재사용 가능하도록 해제합니다.

테이블의 데이터를 일괄 삭제하는 명령어로 DML 로 분류할 수도 있지만 내부 처리 방식이나 Auto Commit 특성으로 인해 DDL 로 분류됩니다.

 

아예 삭제되기때문에

복원이 어렵다(ROLLBACK)

 

TRUNCATE TABLE <TABLE_NAME>: -- ORACLE, MS-SQL, GOLDILOCKS