ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Oracle - 제약조건 추가하기
    DataBase/Oracle 2024. 9. 12. 23:00
    반응형

    Oracle - 제약조건 추가하기

     

     

    1. 테이블 생성과 기본적인 NOT NULL 제약 조건 추가

    CREATE TABLE test_table20(
      data1 NUMBER,
      data2 NUMBER,
      data3 NUMBER,
      data4 NUMBER,
      data5 NUMBER,
      data6 NUMBER
    );
    
    -- Null 제약 조건 추가 (data1에 NULL 값을 허용하지 않음)
    ALTER TABLE test_table20
    MODIFY data1 NOT NULL;
    
    -- NULL 값 삽입 시도 (에러 발생)
    INSERT INTO test_table20 (data1)
    VALUES (null);

    설명: data1 컬럼에 NOT NULL 제약 조건을 추가함으로써, NULL 값이 입력되지 않도록 설정했습니다. NULL 값을 삽입하려고 하면 에러가 발생합니다.

     

     

    2. PRIMARY KEY 제약 조건 추가 및 중복된 값 삽입

    -- Primary key 제약 조건 추가 (data2 컬럼에 기본 키 설정)
    ALTER TABLE test_table20
    ADD CONSTRAINT test_table20_data2_pk PRIMARY KEY(data2);
    
    -- 데이터 삽입 (성공)
    INSERT INTO test_table20 (data1, data2)
    VALUES(1, 10);
    
    -- 중복된 PRIMARY KEY 삽입 시도 (에러 발생)
    INSERT INTO test_table20 (data1, data2)
    VALUES(2, 10);
    
    -- NULL 값 삽입 시도 (에러 발생)
    INSERT INTO test_table20 (data1, data2)
    VALUES(3, null);

    설명: data2 컬럼에 PRIMARY KEY 제약 조건을 추가하여 중복된 값이나 NULL 값이 입력될 수 없게 했습니다. 중복된 값이나 NULL 값을 삽입하려 하면 에러가 발생합니다.

     

     

    3. FOREIGN KEY 제약 조건 추가 및 참조된 테이블에서의 제약 사항

    -- FOREIGN KEY 제약 조건 추가 (data3 컬럼이 emp 테이블의 empno를 참조)
    ALTER TABLE test_table20
    ADD CONSTRAINT test_table20_data3_fk FOREIGN KEY(data3)
    REFERENCES emp(empno);
    
    -- 데이터 삽입 (성공)
    INSERT INTO test_table20 (data1, data2, data3)
    VALUES(10, 100, 7369);
    
    -- 참조되지 않은 값 삽입 시도 (에러 발생)
    INSERT INTO test_table20 (data1, data2, data3)
    VALUES(11, 101, 100);

    설명: data3 컬럼에 FOREIGN KEY 제약 조건을 추가하여 emp 테이블의 empno 컬럼에 있는 값만 입력되도록 했습니다. 참조되지 않은 값을 삽입하려 하면 에러가 발생합니다.

     

     

    4. UNIQUE 제약 조건 추가 및 중복된 값 삽입 시도

    -- UNIQUE 제약 조건 추가 (data4 컬럼에 중복된 값이 들어갈 수 없음)
    ALTER TABLE test_table20
    ADD CONSTRAINT test_table20_data4_uk UNIQUE(data4);
    
    -- 데이터 삽입 (성공)
    INSERT INTO test_table20 (data1, data2, data4)
    VALUES(12, 102, 100);
    
    -- 중복된 UNIQUE 값 삽입 시도 (에러 발생)
    INSERT INTO test_table20 (data1, data2, data4)
    VALUES(13, 103, 100);

    설명: data4 컬럼에 UNIQUE 제약 조건을 추가하여 중복된 값이 들어가지 않도록 설정했습니다. 중복된 값을 삽입하려 하면 에러가 발생합니다.

     

     

    5. CHECK 제약 조건 추가 및 유효성 검사

    -- CHECK 제약 조건 추가 (data5 값이 1과 10 사이여야 함)
    ALTER TABLE test_table20
    ADD CONSTRAINT test_table20_data5_ck CHECK(data5 BETWEEN 1 AND 10);
    
    -- 데이터 삽입 (성공)
    INSERT INTO test_table20 (data1, data2, data5)
    VALUES(14, 104, 5);
    
    -- 유효하지 않은 값 삽입 시도 (에러 발생)
    INSERT INTO test_table20 (data1, data2, data5)
    VALUES(15, 105, 20);

    설명: data5 컬럼에 CHECK 제약 조건을 추가하여 값이 1과 10 사이여야만 저장되도록 했습니다. 유효하지 않은 값을 삽입하려 하면 에러가 발생합니다.

     

     

    6. IN 조건을 사용한 CHECK 제약 조건

    -- CHECK 제약 조건 추가 (data6 값이 10, 20, 30 중 하나여야 함)
    ALTER TABLE test_table20
    ADD CONSTRAINT test_table20_data6_ck CHECK(data6 IN(10, 20, 30));
    
    -- 데이터 삽입 (성공)
    INSERT INTO test_table20 (data1, data2, data6)
    VALUES(16, 106, 20);
    
    -- 유효하지 않은 값 삽입 시도 (에러 발생)
    INSERT INTO test_table20 (data1, data2, data6)
    VALUES(17, 107, 50);

    설명: data6 컬럼에 IN 조건을 사용하는 CHECK 제약 조건을 추가하여 10, 20, 30 중 하나의 값만 입력되도록 했습니다. 유효하지 않은 값이 삽입되면 에러가 발생합니다.

     

     

    7. 제약 조건 비활성화 및 활성화

    -- PRIMARY KEY 제약 조건 비활성화
    ALTER TABLE test_table40
    DISABLE CONSTRAINT test_table40_data1_pk;
    
    -- 데이터 삽입 (성공, 중복된 값 허용)
    INSERT INTO test_table40 (data1)
    VALUES(100);
    
    -- PRIMARY KEY 제약 조건 재활성화
    ALTER TABLE test_table40
    ENABLE CONSTRAINT test_table40_data1_pk;
    
    -- 데이터 삽입 시도 (에러 발생, 중복된 값 불허)
    INSERT INTO test_table40 (data1)
    VALUES(100);

    설명: PRIMARY KEY 제약 조건을 비활성화하면 중복된 값을 허용할 수 있지만, 다시 활성화하면 중복된 값을 삽입할 수 없습니다.

    반응형

    'DataBase > Oracle' 카테고리의 다른 글

    Oracle - 인덱스(index)  (0) 2024.09.25
    Oracle - 테이블 구조 변경하기  (0) 2024.09.19
    Oracle - 제약조건  (0) 2024.09.10
    Oracle - 테이블 생성 , 데이터타입  (0) 2024.09.03
    Oracle - delete 정복하기  (0) 2024.09.03

    댓글

Designed by Tistory.