Web develop/SQL

[SQL/ORACLE] DDL

ForA 2019. 5. 22. 17:22
728x90

: Data Definition Language (데이터 정의어)

종류) CREATE, DROP, ALTER, RENAME, TRUNCATE

  • DDL은 AUTO Commit을 함

CREATE

CREATE TABLE 테이블명(
    컬럼명1 자료형(길이),
    컬럼명2 자료형(길이),
    컬럼명3 자료형(길이)
);

CREATE TABLE emp2( 
    empno number(4)
);
  • 이미 존재하는 테이블명(객체명)과 같은 이름은 생성불가
  • 식별자 규칙에 따라 테이블명 설정 (숫자 첫글자 X, 예약어 X, 특수문자X 등등)

데이터 타입

CHAR : 주어진 크기만큼 고정길이의 문자 저장 1바이트2000바이트

VARCHAR2 : 주어진 크기만큼 가변길이의 문자 저장 1바이트4000바이트

NUMBER(p[,s]) : 정밀도와 스케일로 표현되는 숫자. 바이트수 생략 가능
NUMBER(7,2) : 전체 자릿수 7, 소숫점 이하 2자리까지 표현

no number(7,2) --> 12345.67
입력=> 12345 (O)
입력=> 123456 (X)
입력=> 12345.678 (O) --> 저장: 12345.68 (반올림)
입력=> 99999.992 (O)
입력=> 99999.995 (X) --> 저장: 10000000.00 (범위초과)

DATE : 날짜 형식 저장

TIMESTAMP : DATE형의 확장된 형태

BLOB : 대용량의 바이너리 데이터를 저장, 최대 4GB

CLOB : 대용량의 텍스트 데이터를 저장, 최대 4GB

BFILE : 대용량의 바이너리 데이터를 파일형태로 저장, 최대 4GB

서브쿼리를 이용한 테이블 생성

  • 기존테이블의 구조(컬럼, 자료형)와 행 데이터를 복사

  • 제약(constraint)은 복사에서 제외

-- 전체 복사
    CREATE TABLE 테이블명 AS 서브쿼리;
    CREATE TABLE emp4 as SELECT * FROM emp;

    -- 원하는 컬럼과 행만 복사
    CREATE TABLE emp3 AS SELECT empno, ename, job FROM emp WHERE deptno = '30';

    -- 테이블 구조만 복사 (데이터 x)
    CREATE TABLE emp4 AS SELECT * FROM emp WHERE 1=0;  //WHERE에 조건식 FALSE 대입

ALTER

: 컬럼추가, 컬럼삭제, 컬럼의 자료형, 바이트 수를 변경

  • 컬럼 추가

    ADD (추가컬럼명 자료형)  
    ALTER TABLE emp4 ADD (email VARCHAR2(20));  
    ==> Table altered
  • 컬럼 수정

    MODIFY (기존컬럼명 자료형)  
    ALTER TABLE emp4 MODIFY (email VARCHAR2(30));
  • 컬럼 삭제

    ALTER TABLE 테이블명 DROP COLUMN 컬럼명;  
    ALTER TABLE emp4 DROP COLUMN email;
  • 컬럼 이름변경

    ALTER TABLE 테이블명 RENAME COLUMN 기존컬럼명 TO 새컬럼명
  • 컬럼 사용안함

    ALTER TABLE 테이블명 SET UNUSED 컬럼명
    
    UNUSED 설정된 컬럼들 삭제  
    DROP UNUSED COLUMN

DROP

  • 테이블 객체 삭제

    DROP TABLE 테이블명;

RENAME

  • 테이블 이름변경

    RENAME 기존테이블명 TO 변경테이블명;

TRUNCATE

  • 테이블의 전체 데이터 지우기

  • 주의: TRUNCATE 명령어를 통해 삭제된 데이터는 ROLLBACK 불가능(DDL은 AutoCommit)

    TRUNCATE TABLE 테이블명;