ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • SQL 제약조건 Check & Default
    Data Base_Oracle/SQL 2020. 1. 4. 16:14

    Check

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

    § 형식

    [ SQL> ~~~ 제약조건이름 check(범위지정 or 문자열 지정)]

    • check(age >= 20 and age <= 65)
    • check in('사원', '대리', '계장', '과장', ~)

    #예제

    ▷ [ SQL> alter table b_prtest
    add constraint b_prtest_ck_age check(age >= 20 and age <= 65);
    SQL> insert into b_prtest values(3, '테스트', 123, '서울시 강남구');
    1행에 오류:
    ORA-02290: 체크 제약조건(TEST1.B_PRTEST_CK_AGE)이 위배되었습니다 ]

     

    ▶ [ SQL> insert into b_prtest values(3, '테스트', 23, '서울시 강남구');
    1 개의 행이 만들어졌습니다. ]

    Default

    기본값을 설정해서 데이터 입력/미입력에 따라 편리하게 값을 저장할 수 있음

    # 예제

    ▶ 고용일을 오늘날짜로 자동 저장
    [ SQL> alter table b_prtest add (hiredate date default sysdate);
    SQL> select * from b_prtest; ]

    ID IRUM AGE ADDR HIREDATE
    1 홍길동     20/01/03
    2 홍길동     20/01/03
    3 테스트 23 서울시 강남구 20/01/03

    ※ 고용일을 입력하지 않았던 로우에도 자동으로 값이 추가됨

     

    # insert 활용 예제

    ▶ [ SQL> insert into b_prtest values(4, '테스트2', 34, '서울시', '2020-01-03');
    SQL> insert into b_prtest values(5, '테스트3', 26, '대전 중구', sysdate);
    SQL> insert into b_prtest values(6, '테스트4', 22, '부산시', default);
    SQL> insert into b_prtest values(7, '테스트5', 27, '부산시', null); ]
    default조건이 설정된 칸에 default를 입력하면 기본값(sysdate)이 저장됨
    날짜값에 날짜함수 사용가능, null을 입력하면 데이터가 들어가지 않음

    ID HIREDATE
    4 20/01/03
    5 20/01/03
    6 20/01/03
    7  

    ※ 데이터 입력 오류 예제
    [ SQL> insert into b_prtest values(4, '테스트2', 34, '서울시');
    1행에 오류:ORA-00947: 값의 수가 충분하지 않습니다]
    ※ 데이터 입력 유무와 상관없이( 값이 저장되지 않는 필드가 있더라도 )
    insert로 값을 저장할 때는 필드의 개수와 순서를 정확히 맞춰야 함

     

    § insert의 또 다른 형식
    [ SQL> insert into 테이블명(필드명1, 필드명2,,,,, 필드명n) values(값1, 값2,,,,값n) ]
    1 : 1 대응 관계로 값이 저장됨
    null을 허용하는 필드와 default제약조건 필드는 필드명 생략가능,
    not null은 생략 불가
    ▶ [ SQL> insert into b_prtest(id,irum,age) values(8,'테스트8',43);
    SQL> select id, hiredate from b_prtest where id=8; ]

    ID HIREDATE
    8 20/01/03

    ※ default 필드(HIREDATE)에 값을 따로 설정하지 않았지만 기본값이 저장됨


    default와 check 제약조건을 적절히 사용할 수 있다면 조금 더 편리하게 데이터를 저장할 수 있을 것입니다.

    'Data Base_Oracle > SQL' 카테고리의 다른 글

    SQL_Constraint Enable / Disable  (0) 2020.01.06
    SQL 제약조건 Foreign Key  (0) 2020.01.04
    SQL 제약조건 Primary Key & Unique  (0) 2020.01.04
    SQL 제약조건(Constraint) 종류 및 개요  (0) 2020.01.04
    SQL DDL_Drop, Rename  (0) 2020.01.04

    댓글

Designed by Tistory.