ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Oracle - 제약조건
    DataBase/Oracle 2024. 9. 10. 22:59
    반응형

    1. NOT NULL 제약조건

    NOT NULL은 컬럼에 NULL 값이 저장되지 않도록 강제하는 제약 조건입니다. 즉, 해당 컬럼에 값이 반드시 입력되어야 합니다.

     

    예시:

    CREATE TABLE test_table1(
      data1 NUMBER,
      data2 NUMBER NOT NULL -- data2는 NULL 값 저장 불가
    );
    
    INSERT INTO test_table1(data1, data2) 
    VALUES(100, 101); -- 정상적으로 삽입
    
    INSERT INTO test_table1(data1) 
    VALUES(200); -- 오류 발생: data2는 NOT NULL 제약조건이므로 NULL을 허용하지 않음

    설명: test_table1에서 data2는 NOT NULL 제약이 걸려 있어서 반드시 값이 입력되어야 합니다. 그렇지 않으면 오류가 발생합니다.

     


     

    2. UNIQUE 제약조건

    UNIQUE는 중복된 값을 허용하지 않는 제약 조건입니다. 단, NULL 값은 중복을 허용합니다. 즉, 여러 개의 NULL 값을 저장할 수 있습니다.

    예시:

    CREATE TABLE test_table2(
      data1 NUMBER,
      data2 NUMBER CONSTRAINT test_table2_data2_UK UNIQUE -- data2는 중복된 값을 허용하지 않음
    );
    
    INSERT INTO test_table2(data1, data2) 
    VALUES(100, 101); -- 정상적으로 삽입
    
    INSERT INTO test_table2(data1, data2) 
    VALUES(200, 101); -- 오류 발생: data2의 값이 중복됨
    
    INSERT INTO test_table2(data1) 
    VALUES(300); -- 정상적으로 삽입: data2에 NULL 값 허용

    설명: test_table2에서 data2는 UNIQUE 제약 조건이 설정되어 있어서, 같은 값을 중복으로 입력할 수 없습니다. 하지만 NULL 값은 여러 번 입력이 가능합니다.

     


    3. PRIMARY KEY 제약조건

    PRIMARY KEY는 중복된 값을 허용하지 않으며, NULL 값도 허용하지 않는 제약 조건입니다. 테이블의 각 행을 고유하게 식별하기 위한 주 키 역할을 합니다.

    예시:

    CREATE TABLE test_table3(
      data1 NUMBER,
      data2 NUMBER CONSTRAINT TEST_TABLE3_DATA2_PK PRIMARY KEY -- data2는 PRIMARY KEY로 설정
    );
    
    INSERT INTO test_table3(data1, data2) 
    VALUES(100, 101); -- 정상적으로 삽입
    
    INSERT INTO test_table3(data1, data2) 
    VALUES(100, 101); -- 오류 발생: PRIMARY KEY는 중복 불가
    
    INSERT INTO test_table3(data1) 
    VALUES(200); -- 오류 발생: PRIMARY KEY 컬럼에 NULL을 허용하지 않음

    설명: test_table3의 data2는 PRIMARY KEY로 설정되어, 값이 중복될 수 없고 반드시 입력되어야 합니다. 또한 PRIMARY KEY는 테이블당 하나만 설정할 수 있습니다.

     


     

    4. FOREIGN KEY 제약조건

    FOREIGN KEY는 다른 테이블의 특정 컬럼을 참조하여, 참조 무결성을 유지하는 제약 조건입니다. 주로 두 테이블 간의 관계를 설정할 때 사용됩니다.

    예시:

    CREATE TABLE test_table4(
      data1 NUMBER CONSTRAINT test_table4_pk PRIMARY KEY, -- data1이 PRIMARY KEY
      data2 NUMBER NOT NULL
    );
    
    CREATE TABLE test_table5(
      data3 NUMBER NOT NULL,
      data4 NUMBER CONSTRAINT test_table5_data4_FK REFERENCES test_table4(data1) -- test_table4의 data1을 참조
    );
    
    INSERT INTO test_table4(data1, data2) 
    VALUES(100, 101); -- test_table4에 데이터 삽입
    
    INSERT INTO test_table5(data3, data4) 
    VALUES(1, 100); -- test_table5에 삽입 성공: test_table4의 data1을 참조
    
    INSERT INTO test_table5(data3, data4) 
    VALUES(2, 200); -- 오류 발생: test_table4에 200이라는 data1 값이 없으므로 삽입 불가

    설명: test_table5의 data4는 FOREIGN KEY로 설정되어 test_table4의 data1을 참조합니다. 외래 키가 참조하는 값이 존재하지 않으면 삽입이 실패합니다.

     


    5. CHECK 제약조건

    CHECK는 특정 컬럼에 저장될 값의 조건을 지정하는 제약 조건입니다. 지정한 조건을 만족하는 값만 해당 컬럼에 저장될 수 있습니다.

    예시:

    CREATE TABLE test_table6(
      data1 NUMBER CONSTRAINT test_table6_data1_ck CHECK(data1 BETWEEN 1 AND 10), -- data1은 1~10 범위 내의 값만 허용
      data2 NUMBER CONSTRAINT test_table6_data2_ck CHECK(data2 IN(10, 20, 30)) -- data2는 10, 20, 30 중 하나만 허용
    );
    
    INSERT INTO test_table6(data1, data2) 
    VALUES(1, 10); -- 정상적으로 삽입
    
    INSERT INTO test_table6(data1, data2) 
    VALUES(11, 10); -- 오류 발생: data1의 값이 1~10 범위를 벗어남
    
    INSERT INTO test_table6(data1, data2) 
    VALUES(5, 25); -- 오류 발생: data2의 값이 10, 20, 30 중 하나가 아님

    설명: test_table6에서 CHECK 제약 조건을 사용해 data1은 1부터 10 사이의 값만 허용하고, data2는 10, 20, 30 값 중 하나만 입력되도록 제한합니다.

     

     

     

    요약:

    • NOT NULL: 해당 컬럼에 NULL 값을 허용하지 않음.
    • UNIQUE: 중복된 값을 허용하지 않음. 하지만 NULL 값은 여러 번 입력 가능.
    • PRIMARY KEY: 중복된 값을 허용하지 않으며, NULL 값도 허용하지 않음. 테이블의 각 행을 고유하게 식별.
    • FOREIGN KEY: 다른 테이블의 특정 컬럼을 참조하는 제약 조건. 참조 무결성 유지.
    • CHECK: 특정 컬럼에 저장될 값을 조건으로 제한.
    반응형

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

    Oracle - 테이블 구조 변경하기  (0) 2024.09.19
    Oracle - 제약조건 추가하기  (0) 2024.09.12
    Oracle - 테이블 생성 , 데이터타입  (0) 2024.09.03
    Oracle - delete 정복하기  (0) 2024.09.03
    Oracle - Update 정복하기  (0) 2024.09.02

    댓글

Designed by Tistory.