SQL - DDL

박현·2022년 11월 7일
0

SQL

목록 보기
30/34

CREATE TABLE

: 테이블은 데이터베이스의 가장 기본적인 객체로, 행과 열의 구조로 데이터를 저장한다. 테이블 생성을 위해서는 해당 테이블에 입력될 데이터를 정의하고, 정의한 데이터를 어떠한 데이터 유형으로 선언할 것인지를 결정해야 한다.

1. 테이블과 컬럼 정의

  • 테이블에 존재하는 모든 데이터를 고유하게 식별할 수 있으면서 반드시 값이 존재하는 단일 컬럼이나 컬럼의 조합들 중에 하나를 선정해 기본키 컬럼으로 지정한다.
  • 테이블과 테이블간에 정의된 관계는 기본키와 외부키를 활용해 설정하도록 한다.

2. CREATE TABLE

테이블을 생성하는 구문 형식은 다음과 같다.

CREATE TABLE 테이블명(
	컬럼명1 데이터 유형 [기본값] [NOT NULL]
    ,컬럼명2 데이터 유형 [기본값] [NOT NULL]
    ,컬럼명3 데이터 유형 [기본값] [NOT NULL]
	,...
);
  • 테이블 생성 시 주의할 점
    1. 테이블명은 객체를 의미할 수 있는 적절한 이름을 사용.
    2. 테이블명은 다른 테이블의 이름과 중복되지 않아야 한다.
    3. 한 테이블 내에서는 컬럼명이 중복되게 지정될 수 없다.
    4. 테이블 이름을 지정하고 각 컬럼들은 괄호로 묶어 지정한다.
    5. 컬럼에 대해서는 다른 테이블까지 고려해 데이터베이스 내에서는 일관성있게 사용하는 것이 좋다.
    6. 컬럼뒤에 데이터 유형은 꼭 지정돼야 한다.
    7. 벤더에서 사전에 정의한 예약어는 쓸 수 없다.
    8. 테이블명과 컬럼명은 반드시 문자로 시작해야 한다.

3. 제약조건

: 제약조건이란 사용자가 원하는 조건의 데이터만 유지하기 위한 즉 데이터의 무결성을 유지하기 위한 데이터베이스의 보편적인 방법으로 테이블의 특정 컬럼에 설정하는 제약이다.

  • NULL
    : 아직 정의되지 않은 미지의 값이거나 아직 데이터가 입력되지 않은 경우를 의미한다.

  • DEFAULT
    : 사전에 정의된 기본 값이 자동으로 입력된다.

4. 생성된 테이블 구조 확인

Oracle은 'DESCRIBE 테이블명;' 또는 간략히 'DESC 테이블명;'으로 해당 테이블에 대한 정보를 확인할 수 있다.

5. SELECT 문장으로 테이블 생성 사례

CTAS(Create Table ~ As Select ~)
기존 테이블을 이용한 CTAS방법을 사용하면 컬럼별로 데이터 유형을 다시 정의하지 않아도 된다.

  • 주의할점
    : 기존 테이블의 제약조건중에 NOT NULL 제약만 새로 생성되는 테이블에 적용되고 기본키,고유키,외래키,CHECK등의 다른 제약조건은 없어진다.
CREATE TABLE TEAM_TEMP AS SELECT * FROM TEAM;

ALTER TABLE

: 컬럼을 추가/삭제하거나 제약조건을 추가/삭제하는 작업을 진행할 수 있다.

1. ADD COLUMN

ALTER TABLE 테이블명
        ADD( 추가할 컬럼명1 데이터유형 [기본값] [NOT NULL]
        	[,추가할 컬럼명2 데이터유형 [기본값] [NOT NULL]
        ]);
  • 새롭게 추가된 컬럼은 테이블의 마지막 컬럼이 되며 컬럼의 위치를 지정할 수는 없다.

2. DROP COLUMN

: 테이블에서 필요 없는 컬럼을 삭제할 수 있으며 데이터가 있거나 없거나 모두 삭제 가능하다.
단 컬럼삭제 후 최소 하나 이상의 컬럼이 테이블에 존재해야하며 한번 삭제된 컬럼은 복구할 수 없다.

ALTER TABLE 테이블명 DROP (삭제할컬럼명1 [,삭제할컬럼명2, ...]);

3. MODIFY COLUMN

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

ALTER TABLE 테이블명
      MODIFY( 컬럼명1 데이터유형 [기본값] [NOT NULL]
      		[,컬럼명2 데이터유형 [기본값] [NOT NULL]
  		     , ...
      ]);
  • 컬럼을 변경할때는 몇가지 사항을 고려해야 한다.
  1. 테이블에 데이터가 존재한다면 컬럼의 크기를 줄이는 데는 제약이 있다.
    기존의 데이터가 훼손될수 있기 때문
  2. 해당컬럼이 NULL값만 갖고 있거나 테이블에 아무 행도 없으면 컬럼의 크기를 줄일 수 있다.
  3. 해당컬럼이 NULL값만을 갖고있으면 데이터 유형을 변경할 수 있다.
  4. 해당 컬럼이 DEFAULT값을 바꾸면 변경 작업 이후 발생하는 행 삽입에만 영향을 미친다.
  5. 해당컬럼에 NULL값이 없는 경우에만 NOT NULL제약조건을 추가할 수있다.

4. RENAME COLUMN

: 컬럼명을 변경해야 하는 경우 사용한다.

ALTER TABLE 테이블명 RENAME COLUMN 기존컬럼명 TO 변경컬럼명;
  • 컬럼명이 변경되면 해당컬럼과 관계된 제약조건에 대해서도 자동으로 변경되는 장점이 있다.

DROP CONSTRAINT

: 테이블 생성시 부여했던 제약조건을 삭제하는 명령어

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

ADD CONSTRAINT

: 테이블 생성시 제약조건을 적용하지 않았다면, 생성이후에 필요에 의해 제약조건을 추가할 수 있다.

ALTER TABLE 테이블명 ADD CONSTRAINT 제약조건명 제약조건 (컬럼명);

RENAME TABLE

: RENAME 명령어를 사용해 테이블의 이름을 변경할 수 있다.

RENAME 기존 테이블명 TO 새로운 테이블명;

DROP TABLE

: 테이블을 삭제하는 명령어

DROP TABLE 테이블명 [CASCADE CONSTRAINT];

: CASCADE CONSTRAINT 옵션은 해당 테이블과 관계가 있었던 참조되는 제약조건에 대해서도 삭제함을 의미한다.

TRUNCATE TABLE

: 테이블 자체가 삭제되는 것이 아니고 해당 테이블에 들어 있던 모든 행들이 제거되고 저장 공간을 재사용 가능하도록 해제한다.

TRUNCATE TABLE 테이블명;

: DELETE 와 TRUNCATE는 처리하는 방식 자체가 다르다. 테이블의 전체데이터를 삭제하는 경우 시스템활용 측면에서는 DELETE보다는 시스템 부하가 적은 TRUNCATE을 권고햔다. 단 TRUNCATE TABLE의 경우 정상적인 복구가 불가능하므로 주의해야 한다.

0개의 댓글