ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 010920
    SQL 2020. 9. 1. 09:03

    DDL - TABLE 과  CONSTRAINT

     

    DB의 기본 데이터 저장 단위인 TABLE은 사용자가 접근 가능한 데이터를 보유하여 RECORD(행)와 COLUMN(열)로 구성된다.

     

    시스템 내에서 독립적으로 사용되길 원하는 데이터의 집합을 의미

     

    집합 간의 관계를 표현할 수 있는데, 이를 위해서 FOREIGN KEY를 사용한다.

     

    DDL (Data Definition Language)를 이용해  TABLE을 CREATE, ALTER, DROP할 수 있다.

     

     

    DATA TYPE

     

    char

    고정 길이 문자 데이터

    입력된 데이터의 크기와 무관하게 고정된 길이만큼 저장 공간을 차지한다.

    저장 공간의 크기를 명시해야 하며, 최소 크기는 1

     

    varchar2

    가변 길이 문자 데이터

    실제 입력된 데이터의 크기만큼 공간을 차지한다.

    최대 크기를 명시해야 하며, 최소 크기는 1

     

    number

    가변 길이 숫자 데이터

    모든 정수 저장

    연산이 필요한 칼럼에 NUMBER 타입 지정

    소수점 자릿수 이상 입력되면 반올림하여 저장

     

    number 타입의 3가지 방법

    • number : 최고 38자리까지의 숫자 저장 가능
    • number(w) : w자리까지의 수치로 최대 38자리까지 가능 (유효 숫자가 38까지)
    • number(w, d) : w는 전체 자릿수, d는 소수점 이하 자릿수를 지정, w는 d의 길이를 포함

     

    date

    날짜와 시간을 저장하는 날짜형 데이터

    BC 4712년 1월 1일 ~ AD 4712년 12월 31일까지의 날짜를 저장할 수 있다. 

    세기부터 초까지의 데이터를 포함

     

     

    timestamp

    DATE형의 확장된 형태

    밀리초까지 표현 가능

     

     

    long

    가변 길이 문자형 데이터 타입

    최대 크기는 2GB

    테이블에 한 개의 COLUMN만 생성 가능

    SELECT의 결과로 데이터가 직접 조회된다. --나머지는? 다른걸로 조회되는겨?

     

     

    clob

    가변 길이 문자형 데이터 타입

    최대 크기는 4GB

    테이블에 여러 개의 COLUMN 생성 가능

    SELECT의 결과로 데이터의 '위치'가 조회된다.

     

     

    raw / long raw

    이미지나 사운드를 저장할 수 있는 데이터 타입

    이진 데이터를 저장하며 16진수 형태로 표시된다.

    varchar2 데이터 타입과 유사하지만 문자변환을 수행할 수 없음

     

     

    bfile

    대용량 이진 데이터를 파일 형태로 저장하는 데이터 타입

    최대 크기는 4GB

     

    명명규칙

    1.문자로 시작

    2. 1 ~ 30자까지 가능

    3. A~Z의 대소문자, 0~9의 숫자, 특수기호(_, $, #)만 가능

    4. 오라클의 예약어나 다른 객체명과 중복 불가

    5. 공백 안돼

     

    CONSTRAINT

    1. COLUMN LEVEL - inline

     

    2. TABLE LEVEL - outline

     

    not null

     

    unique

     

    check

     

    primary key

     

    foreign key

    기본키를 참조하는 COLUMN 혹은  COLUMN의 집합을 뜻한다.

    참조하고 있는 primary key의 데이터 타입과 일치해야 하며 foreign key에 참조되는 primary key는 삭제할 수 없는 제약에 걸린다.

     

    on delete [cascade / set null] 연산자를 통해 기본키가 삭제될 경우 함께 삭제된다.

    foreign key로 지정된 primary key를 삭제할 때 cascade를 쓰면 전부 삭제되고,

    set null하면 foreign key가 nullable로 변경된다.

    foreign key에 constraint 줄 때 함께 입력하며, 후에 삭제될 때 참조무결성을 해치지 않으면서 삭제하기 위함

     

     

    제약사항 확인

     

    user_cons_columns : column에 할당된 제약 조건 조회

    user_constraints : 유저가 소유한 모든 모든 제약 조건 조회

     

    ALTER TABLE

    alter table ~ add

    더보기

    add

    기존 테이블에 새로운 컬럼을 추가

    새로운 컬럼은 마지막에 추가

    원하는 위치에는 못해

    데이터가 존재하지 않는 row에는 null로 입력된다

    alter table test
    	add (
        job varchar(9)
        );

     

    add 제약조건

     

    기존 테이블에 새로운 제약조건을 추가

    alter table table_name
    	add [constraint constraint_name] constraint_type (column_name)
        ;

     

    [ ]는 생략 가능하며, 이름을 지정하지 않은 경우 정해진 이름(sys_ xxxxx)로 생성된다.

     

    alter table ~ rename

    더보기

    rename

    컬럼명을 바꿀 때 사용

    alter table test
    	RENAME COLUMN ename TO empname
        ;

     

    rename 제약조건

     

    제약조건명을 바꿀 때 사용

    alter table emp
    	RENAME CONSTRAINT constraint_name TO constraint_name_changed
        ;

     

     

     

    alter table ~ modify

    더보기

    modify

    테이블에 이미 존재하는 칼럼을 수정

    해당 컬럼의 데이터 유무에 따라 동작이 다르다

     

      자료가 없는 경우 자료가 있는 경우
    테이터 타입 변경 변경 가능 변경 불가 (조건부)
    컬럼의 크기 변경 변경 가능 작은 크기로는 불가

    *자료가 있는 경우 데이터 타입 변경이 가능한 경우는 char과 varchar2 뿐 (최대값 고려해서 변경해야 한다)

    alter table test
    	modify (
        job varchar(30)
        );

     

    컬럼의 default 값을 변경하는 경우, 소급 적용이 되지 않는다.

     

    modify 제약조건

     

    not null을 제외한 제약조건은 수정이 불가

     > drop 후,  add

     

    alter table table_name
    	MODIFY column_name CONSTRAINTS constraint_name NOT NULL
        ;

     

     

    alter table ~ drop

    더보기

    drop

    테이블의 존재하는 컬럼을 삭제

    alter table test
    	DROP COLUMN sal
        ;

     

    drop 제약조건

     

    테이블에 존재하는 제약조건 삭제

    alter table table_name
    	DROP [CONSTRAINT constraint_name]
    ;

     

    delete / drop / truncate

     

      종류 rollback 가능여부 비고
    delete DML YEP 데이터가 지워지지만, 테이블의 용량은 그대로

    TRIGGER가 걸리면 각 행이 삭제될 때마다 실행

    이전에 할당되었던 영역은 삭제되어 빈 TABLE이나 CLUSTER에 그대로 남겨져 있음
    truncate table DDL NOPE 데이터도 지워지고 테이블의 용량도 줄어듦

    TABLE과 관련된 구조 (constraint, trigger 등)과 권한에 영향을 주지 않는다.
    drop table DDL NOPE 데이터뿐 아니라 테이블 자체가 삭제

    모든 관련된 INDEX, CONSTRAINT, TRIGGER도 삭제

     

     

     

    PL/SQL

     

    Oracle's Procedural Language extension to SQL의 약자

     

    변수 정의

    조건 처리

    반복 처리 

     

    잘차적인 방식으로 사용하도록 설계된 Procedure Language

     

     

    구조

    더보기

    PL/SQL 기본 구조

    DECLARE (선택)
    -- 선언 코드
    BEGIN (필수)
    -- 실행 코드
    EXCEPTION (선택)
    -- 예외 처리 코드
    END
    ;
    /

     

    변수에 값을 대입할 때에는 := 를 사용한다.

     

    변수 타입

    1. SCALAR

    P_EMPNO NUBMER(4);

    P_ENAME VARCHAR2(10);

     

    2. REFERENCE

    P_EMPNO EMP.EMPNO%TYPE;

    P_ENAME EMP.ENAME%TYPE;

     

     

    PL/SQL의 SELECT INTO문

     

    변수에 DB의 기존 정보를 대입하기 위해

    데이터 타입, 순서가 동일해야 한다.

     

    --화면에 출력 값을 확인하게 해주는 설정 
    set serveroutput on;
    
    declare
    	d_empno emp.empno%type;
        d_ename emp.ename%type;
       
    
    begin
    	--오라클에서 제공하는 dbms_output 패ㅣ지를 이용해 한 라인 단위로 출력
        dbms_output.put_line('사번/이름');
        dbms_output.put_line('------------');
        
        --select into문
        select empno, ename
        	into p_empno, p_ename
        from emp
        where ename = 'SCOTT'
        ;
        
        --변수 출력
        dbms_output.put_line(p_empno||'/'||p_ename)
        ;
    
    end; -- 끝
    / -- Procedure를 끝낸다

    'SQL' 카테고리의 다른 글

    020920  (2) 2020.09.02
    Mac / Docker / SQL Developer  (0) 2020.09.01
    310820  (0) 2020.08.31
    300820  (1) 2020.08.29
    280820  (2) 2020.08.28

    댓글

Designed by Tistory.