오라클 DDL

95qwer·2022년 5월 14일
0

감사한 분들
https://ypangtrouble.tistory.com/entry/%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%A0%95%EC%9D%98%EC%96%B4%ED%85%8C%EC%9D%B4%EB%B8%94-%EC%88%98%EC%A0%95-CREATE-DROP-MODIFY-RENAME
https://extbrain.tistory.com/39
https://trustall.tistory.com/8
https://jwklife.tistory.com/5
https://gent.tistory.com/323
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=idjoopal&logNo=221559099309
https://code-nen.tistory.com/39
https://sgcomputer.tistory.com/250
https://ggujunheee.tistory.com/17

DDL 이란?

  • 데이터베이스 스키마를 정의하거나 조작하기 위한 언어
  • 생성, 수정, 삭제 등의 데이터 전체 골격을 결정하는 역할
  • DDL은 명령어를 입력하는 순간 작업이 즉시 완료(AUTO COMMIT)되기 때문에 주의해야 합니다.
    ROLLBACK을 통해 만회할 수 없습니다.
DDL 대상스키마 / 도메인 / 테이블 / 뷰 / 인덱스

DDL 종류 : CREATE / ALTER / DROP / RENAME / COMMNET / TRUNCATE

CREATE

CREATE
자료형 정의
열 구조와 테이블 복사(전체 복사)
열 구조와 일부 데이터만 복사
열 구조만 복사

기본 구조 : CREATE TABLE 테이블 명 (+ 서브 쿼리)

기존 테이블의 컬럼 구조와 데이터를 복사하여 새 테이블 생성

CREATE TABLE TMP_TBSL
AS (SELECT * FROM TMP_TMP_TBSL);

기존 테이블과 같은 열 구조로 테이블을 만들고 싶으면 CREATE 문에 서브 쿼리를 사용하면 됩니다.
AS 키워드를 사용하여 생성하면 서브 쿼리에 명시한 테이블과 같은 열 구조를 가지며, WHERE 절을 붙이지 않으면 데이터까지 모두 복사하여 테이블을 생성합니다.

기존 테이블 컬럼 구조와 일부 데이터만 복사하여 새 테이블 생성

CREATE TABLE TMP_TBSL
AS (SELECT * FROM TMP_TMP_TBSL)
WHERE STNO = 30;

기존 테이블과 같은 열 구조로 테이블을 만들되, 일부 데이터만 복사하여 새 테이블을 생성합니다.
서브 쿼리에 WHERE절을 활용하여 저장될 데이터를 조건식으로 지정하면 됩니다.

기존 테이블의 데이터 없이 컬럼 구조만 복사하여 새 테이블 생성

CREATE TABLE TMP_TBSL
AS SELECT T.STNO, T.STNA, T.COM, D.DENO, D.DEPT
FROM TMP_TMP_TBSL T, DEPT D
WHERE 1 <> 1;

여기서 1 <> 1은 1 != 1입니다. 항상 false이기 때문에 모든 결과 행이 출력 대상에서 제외됩니다.
이런 식으로 컬럼 구성은 같지만 빈 테이블을 생성하고 싶을 때는 WHERE 절 조건식의 결과 값이 항상 FALSE가 나오는 방법을 사용할 수 있습니다.

ALTER

ALTER
ADD - ALTER TABLE 테이블 명 ADD 추가할 컬럼 명 데이터형(데이터 크기) 컬럼 속성
RENAME - ALTER TABLE(원본 테이블) RENAME TO (원하는 테이블 명)
MODIFY - ALTER TABLE 테이블 명 MODIFY(컬럼 명 데이터 타입(데이터 크기)
DROP - ALTER TABLE DROP 테이블 명 DROP COLUMN 컬럼 명

ADD

테이블에 새로운 컬럼을 추가하고자 할 때 사용할 수 있습니다.

RENAME

  • 테이블 명 변경을 위해 RENAME을 하기도 하지만, 테이블 백업을 위해 바꾸는 경우도 있습니다
    이 경우, 테이블 명, 앞뒤로 TMP(임시) / BAK(백업)을 붙여 테이블의 용도를 나타냅니다.

  • 테이블 명만 바꾸는 것이기 때문에 인덱스 및 데이터는 변경되지 않습니다.

MODIFY

  • 데이터 타입을 변경할 경우, 해당 컬럼의 값을 모두 지워야 변경 가능합니다.
  • 컬럼 길이를 변경할 경우, 변경할 컬럼의 길이보다 길이가 긴 값이 없어야 합니다.
    분명 데이터 중 목표 사이즈보다 작은 값밖에 없는데 에러를 발생시킬 수 있습니다.
    이 경우 테이블을 복사 후 기존 테이블의 데이터를 TRUNCATE 하고 사이즈를 변경시켜야 할 수 있습니다. 그런데 이렇게 하면 기존 데이터를 전부 옮겨놓고, 다시 복사하고....

속성 지정 예시(https://ggujunheee.tistory.com/17)

기본 값 지정
ALTER TABLE (테이블명) MODIFY (컬럼명) VARCHAR2(5) DEFAULT '1000';

NOT NULL 지정
ALTER TABLE (테이블명) MODIFY (컬럼명) VARCHAR2(5) NOT NULL;

NOT NULL 제거(변경)
ALTER TABLE (테이블명) MODIFY (컬럼명) VARCHAR2(5) NULL;

기본 값 + NOT NULL 지정
ALTER TABLE (테이블명) MODIFY (컬럼명) VARCHAR2(5) DEFAULT '1000' NOT NULL;

TRUNCATE / DELETE(DML) / DROP

TRUNCATE

  • 테이블의 전체 데이터를 삭제할 때
  • DDL이기에 즉시 COMMIT합니다. 실수를 돌이킬 수 없습니다.

DELETE

  • WHERE 절을 통해 조건 데이터만 삭제하고자 할 때(WHERE 없이 전체 절을 삭제하려고 해도, 튜플을 모두 훑으며 삭제하기에 모든 데이터 삭제 시에는 비추천합니다.)
  • 데이터가 담겨 있던 Storage는 릴리즈 되지 않아 COMMIT 명령어를 사용하지 않았다면 ROLLBACK을 통해 실수를 되돌릴 수 있지만, TRUNCATE는 바로 갑니다. Storage 릴리즈.

DROP

  • 테이블 자체를 완전히 삭제합니다. 만일 데이터만 날리고 테이블 틀은 재사용해야 한다면, 이 명렁어를 사용해서는 안 됩니다.
  • DDL이기에 자동 COMMIT되므로 실수를 돌릴 수 없습니다.

참고)

제약 조건 유형

주 키(Primary Key)

  • 테이블의 기본 키를 정의합니다
  • 기본으로 NOT NULL, UNIQUE 제약이 포함됩니다. 따라서, NULL / 공백 문자 / 중복 불가능합니다.
  • 컬럼 2개를 묶어 하나의 주 키에 지정 가능합니다

외래 키(Foreign Key)

  • 외래 키를 정의합니다.
  • 참조 대상을 테이블 명(컬럼 명)으로 명시해야 합니다.
  • 참조 무결성 위배 상황 발생 시, 처리 방법으로 옵션 지정 가능합니다.
    NO ACTION / SET DEFAULT / SET NULL / CASCADE
  • 외부의 테이블을 참조시키고 싶을 때, 해당 키를 컬럼에 지정해서 외부 테이블의 컬럼과 연동 가능합니다.
  • 참조되는 테이블, 즉 PK가 있는 테이블을 부모 테이블, FK가 존재하는 테이블을 자식 테이블이라고 합니다.
  • 자식 테이블에 먼저 값을 넣을 수 없습니다. 참조되는 컬럼에 데이터가 있어야 합니다.

예를 들어, 같은 ID 값을 공유해야 하는 A 테이블(부모)와 B 테이블(자식)이 있다고 가정하고,
참조 테이블로 A 테이블의 ID 컬럼을 참조하면 둘의 부모 자식 관계가 생깁니다.

주의점
외래 키로 묶인 부모 테이블의 컬럼 또는 값은 마음대로 삭제할 수 없습니다.
보통은 ON DELETE CASCADE를 통해 참조되는 부모 테이블의 행에 대한 DELETE를 허용합니다.
즉, 참조되는 부모 테이블 값이 삭제되면 자동으로 자식테이블 값 역시 삭제됩니다.

ON DELETE CASCADE - 부모 테이블의 값을 삭제하면 자식 테이블의 값도 연동하여 삭제
ON DELETE SET NULL - 부모 테이블의 값을 삭제하면 자식 테이블의 값이 NULL로 바뀜

UNIQUE
테이블 내에서 열은 유일한 값을 가져야 한다.
테이블 내에서 동일한 값을 가져서는 안 되는 항목에 지정함

  • 주 키와의 차이점
    PRIMARY KEY와 달리 NULL도 허용
    하나의 테이블에 다수의 UNIQUE KEY가 존재할 수 있음

NOT NULL
테이블 내에서 관련 열의 값은 NULL 일 수 없음
필수 입력 항목에 대해 제약 조건으로 설정함
NULL뿐만 아니라 공백 문자열도 허용하지 않는다.

CHECK
개발자가 정의하는 제약 조건
상황에 따라 다양한 조건 설정 가능

profile
한땀한땀오타없이

0개의 댓글