[정상] Oracle 의 Check 제약 사례 상세 설명

Oracle | PL / SQL Check 구속 용법 상세 설명
1. 목표
Oracle 에서 CHECK 제약 조건 을 어떻게 사용 하 는 지 실례 설명 (생 성, 사용, 사용 하지 않 기, 삭제)
2. Check 구속 이란 무엇 인가?
CHECK 제약 이란 표 의 열 에 추가 적 인 제한 조건 을 추가 하 는 것 을 말한다.
주:
  • CHECK 제약 은 VIEW 에서 정의 할 수 없습니다.
  • CHECK 제약 이 정의 할 수 있 는 열 은 지정 한 표 에 포함 되 어야 합 니 다.
  • CHECK 제약 은 하위 조 회 를 포함 할 수 없습니다.

  • 3. 테이블 생 성 시 CHECK 제약 조건 정의
    3.1 문법:
    CREATE TABLE table_name
    (
        column1 datatype null/not null,
        column2 datatype null/not null,
        ...
        CONSTRAINT constraint_name CHECK (column_name condition) [DISABLE]
    );

    그 중에서 도 DISABLE 의 관건 은 옵션 이다.DISABLE 키 워드 를 사용 하면 CHECK 제약 조건 이 생 성 되면 CHECK 제약 조건 이 적용 되 지 않 습 니 다.
    3.2 예시 1: 수치 범위 검증
    create table tb_supplier
    (
      supplier_id       number,
      supplier_name     varchar2(50),
      contact_name      varchar2(60),
      /*  CHECK  ,      supplier_id          ,         。*/
      CONSTRAINT check_tb_supplier_id CHECK (supplier_id BETWEEN 100 and 9999)
    );
    

    검증: 표 에 supplier 삽입id 만족 조건 과 불만족 조건 두 가지 상황:
    --supplier_id  check    ,          
    insert into tb_supplier values(200, 'dlt','stk');
    
    --supplier_id   check    ,          ,         
    insert into tb_supplier values(1, 'david louis tian','stk');

    조건 에 만족 하지 않 는 오류 알림:
    Error report -
    SQL Error: ORA-02290: check constraint (502351838.CHECK_TB_SUPPLIER_ID) violated
    02290. 00000 -  "check constraint (%s.%s) violated"
    *Cause:    The values being inserted do not satisfy the named check

    3.3 예시 2: 강제로 열 을 삽입 하 는 자 모 는 대문자 이다
    create table tb_products
    (
      product_id        number not null,
      product_name      varchar2(100) not null,
      supplier_id       number not null,
      /*  CHECK  check_tb_products,                   */
      CONSTRAINT check_tb_products
      CHECK (product_name = UPPER(product_name))
    );

    검증: 표 에 produt 삽입name 만족 조건 과 불만족 조건 두 가지 상황:
    --product_name  check    ,          
    insert into tb_products values(2, 'LENOVO','2');
    --product_name   check    ,          ,         
    insert into tb_products values(1, 'iPhone','1');

    조건 에 만족 하지 않 는 오류 알림:
    SQL Error: ORA-02290: check constraint (502351838.CHECK_TB_PRODUCTS) violated
    02290. 00000 -  "check constraint (%s.%s) violated"
    *Cause:    The values being inserted do not satisfy the named check

    4. ALTER TABLE 정의 체크 제약 조건
    4.1 문법
    ALTER TABLE table_name
    ADD CONSTRAINT constraint_name CHECK (column_name condition) [DISABLE];

    그 중에서 도 DISABLE 의 관건 은 옵션 이다.DISABLE 키 워드 를 사용 하면 CHECK 제약 조건 이 생 성 되면 CHECK 제약 조건 이 적용 되 지 않 습 니 다.
    4.2 예시 준비
    drop table tb_supplier;
    --     
    create table tb_supplier
    (
      supplier_id       number,
      supplier_name     varchar2(50),
      contact_name      varchar2(60)
    );

    4.3 CHECK 제약 조건 생 성
    --  check  
    alter table tb_supplier
    add constraint check_tb_supplier
    check (supplier_name IN ('IBM','LENOVO','Microsoft'));

    4.4 검증
    --supplier_name  check    ,          
    insert into tb_supplier values(1, 'IBM','US');
    
    --supplier_name   check    ,          ,         
    insert into tb_supplier values(1, 'DELL','HO');

    조건 에 만족 하지 않 는 오류 알림:
    SQL Error: ORA-02290: check constraint (502351838.CHECK_TB_SUPPLIER) violated
    02290. 00000 -  "check constraint (%s.%s) violated"
    *Cause:    The values being inserted do not satisfy the named check

    5. CHECK 제약 조건 사용 하기
    5.1 문법
    ALTER TABLE table_name
    ENABLE CONSTRAINT constraint_name;

    5.2 예시
    drop table tb_supplier;
    --    CHECK  
    create table tb_supplier
    (
      supplier_id       number,
      supplier_name     varchar2(50),
      contact_name      varchar2(60),
      /*  CHECK  ,          */
      CONSTRAINT check_tb_supplier_id CHECK (supplier_id BETWEEN 100 and 9999) DISABLE
    );
    
    --    
    ALTER TABLE tb_supplier ENABLE CONSTRAINT check_tb_supplier_id;

    6. 체크 제약 사용 안 함
    6.1 문법
    ALTER TABLE table_name
    DISABLE CONSTRAINT constraint_name;
    6.2 예시
    --    
    ALTER TABLE tb_supplier DISABLE CONSTRAINT check_tb_supplier_id;
    7. 구속 상세 정보 보기 문구:
    --         
    select 
    constraint_name,--    
    constraint_type,--    
    table_name,--      
    search_condition,--     
    status--    
    from user_constraints--[all_constraints|dba_constraints]
    where constraint_name='CHECK_TB_SUPPLIER_ID';
    8. CHECK 구속 삭제
    문법
    ALTER TABLE table_name
    DROP CONSTRAINT constraint_name;

    8.2 예시
    ALTER TABLE tb_supplier
    DROP CONSTRAINT check_tb_supplier_id;

    ---------------------------------------------------------------------------------------------------------
    만약 당신 이 시도 하 는 과정 에서 어떤 문제 가 발생 하거나 나의 코드 에 잘못된 부분 이 있다 면 지적 해 주 십시오. 대단히 감사합니다!
    연락처: david. [email protected]
    판권 짱: 전재 출처 를 표시 해 주세요. 그렇지 않 으 면 법 적 책임 을 추궁 하 세 요!
    ----------------------------------------------------------------------------------------------------------

    좋은 웹페이지 즐겨찾기