테이블 생성 및 제약 조건

MINIMI·2023년 1월 18일
0

ORACLE

목록 보기
5/11
post-thumbnail

6-1. 테이블 생성

1) 표현식

  • CREATE TABLE 테이블명(컬럼명 자료형(크기), 컬럼명 자료형(크기)...)
CREATE TABLE MEMBER
(
  MEMBER_ID VARCHAR2(20)
, MEMBER_PWD VARCHAR2(20)
, MEMBER_NAME VARCHAR2(20)
);
  • 컬럼에 주석 달기
    • COMMENT ON COLUMN 테이블명.컬럼명 IS '주석내용'
    COMMENT ON COLUMN MEMBER.MEMBER_NAME IS '회원이름';

6-2. 제약 조건

1)

  • 테이블 작성 시 각 컬럼에 대해 값 기록에 대한 제약 조건을 설정할 수 있다.

  • 데이터 무결성 보장을 목적으로 한다

  • 입력하거나 수정하는 데이터에 문제가 없는지 자동으로 검사

  • PRIMARY KEY, FOREIGN KEY, CHECK, NOT NULL, UNIQUE

  • 해당 계정이 가지고 있는 제약조건 조회 구문

    SELECT
           *
      FROM USER_CONSTRAINT;
    
    SELECT
           *
      FROM USER_CONS_COLUMNS;
  • 제약 조건에 이름을 붙일 경우 CONSTRAINT 를 활용

    • CONSTRAINT NN NOT NULL
      2) NOT NULL
  • 해당 컬럼에 반드시 값이 기록되어야 하는 경우 사용

  • 삽입 혹은 수정 시 NULL 값을 허용하지 않도록 하며 컬럼 레벨에서 제한

    • 컬럼 레벨 : 자료형 옆자리
  • NOT NULL만 반드시 컬럼 레벨에 작성

    CREATE TABLE USER_NOTNULL
    (
      USER_NO NUMBER NOT NULL
    , USER_ID VARCHAR(20) NOT NULL
    );

    3) UNIQUE

  • 컬럼의 입력 값에 대해 중복을 제한하는 제약 조건

  • 컬럼 레벨과 테이블 레벨에 모두 설정 가능

    CREATE TABLE USER_UNIQUE
    (
      USER_NO NUMBER UNIQUE NOT NULL
    )
    
    CREATE TABLE USER_UNIQUE2
    (
      USER_NAME
    , USER_ID
    , UNIQUE(USER_ID)
    );
    
    -- 두 개 이상의 컬럼을 묶어서 하나의 UNIQUE 제약 조건 설정
    -- 묶인 조건이 모두 중볼될 경우 작성 불가
    -- 묶인 조건 중 하나만 중복될 경우 UNIQUE에 위배되지 않는다
    ```sql
    CREATE TABLE USER_UNIQUE3(
      USER_NO NUMBER,
      USER_ID VARCHAR2(20) NOT NULL,
      USER_PWD VARCHAR2(20) NOT NULL,
      UNIQUE(USER_NO, USER_ID)
      );
    
    -- 제약조건에 이름을 붙여 테이블 생성
    CREATE TABEL CONS_NAME(
      TEST_DATA1 VARCHAR2(20) CONSTRAINT NN_TEST NOT NULL
    , TEST_DATA2 NUMBER
    , TEST_DATA3 VARCHAR2(20)
    , TEST_DATA4 VARCHAR2(20)
    CONSTRAINT UN_TEST UNIQUE(TEST_DATA3, TEST_DATA4)
    );

    4) CHECK

  • 컬럼에 기록되는 값에 조건 설정 가능

  • CHECK(컬럼명 비교연산자 비교값)

    • 비교값은 리터럴만 사용 가능
    • 변하는 값이나 함수는 사용 불가
    CREATE TABLE USER_CHECK(
      USER_NO NUMBER,
      USER_ID VARCHAR2(20) UNIQUE,
      GENDER VARCHAR(5) CHECK(GENDER IN ('남','여')
      );

5) PRIMARY KEY

  • 테이블에서 한 행의 정보를 찾기 위해 사용할 컬럼을 의미
  • 테이블에 대한 식별자 역할
  • NOT NULL + UNIQUE
  • 한 테이블당 하나만 설정할 수 있으며 컬럼 레벨, 테이블 레벨에 둘 다 설정 가능
  • 한 개의 컬럼에 설정할 수도 있고, 여러개의 컬럼을 묶어서 설정하는 것도 가능
CREATE TABLE USER_PRIMARYKEY(
  USER_NO NUMBER CONSTRAINT PK_USER_NO PRIMARY KEY
  );

-- 테이블 레벨에서 설정(복합키 설정)
-- INSERT 할 경우 
-- 설정된 두 가지 컬럼 모두 UNIQUE / NOT NULL  조건을 위배할 경우 삽입 불가
CREATE TABLE USER_PRIMARYKEY2(
  USER_NO NUMBER,
  USER_ID VARCHAR2(20),
  CONSTRAINT PK_USER_NO2 PRIMARY KEY(USER_NO, USER_ID)
  );

6) FOREIGN KEY(외부키 | 외래키)

  • 참조(REFERENCES) 된 다른 테이블에서 제공하는 값만 사용할 수 있다.
  • 참조 무결성을 위배하지 않기 위해 사용
  • FOREIGN KEY 제약 조건에 의해서 테이블 간의 관계가 형성되며 제공되는 값 외에는 NULL을 사용 불가
  • 컬럼 레벨
    • 컬럼명 자료형(크기) [CONSTRAINT 제약조건명] REFERENCES 참조테이블명 [(참조컬럼명) | 삭제룰]
  • 테이블 레벨
    • [CONSTRAING 제약조건명] FOREIGN KEY(적용 컬럼명) REFERENCES 참조테이블명 [(참조컬럼명)][삭제룰]
  • 참조 테이블의 참조컬럼명이 생략되면 PRIMARY KEY로 설정 된 컬럼이 자동으로 참조 컬럼이 됨
  • PRIMARY KEY 컬럼과 UNIQUE로 지정된 컬럼만 참조 가능
CREATE TABEL USER_FOREIGNKEY(
  USER_NO NUMBER PRIMARY KEY,
  USER_ID VARCHAR2(20) UNIQUE,
  USER_PWD VARCHAR2(20) NOT NULL,
  GRADE_CODE NUMBER,
  CONSTRAINT FK_GRADE_CODE FOREIGN KEY(GRADE_CODE) REFERENCES USER_GRADE(GRADE_CODE)
  );

6-3. 삭제 옵션

  • 부모 테이블의 데이터 삭제 시 자식 테이블의 데이터를 어떤 식으로 처리할 것인가에 대한 설정

1) ON DELETE RESTRICT

  • FOREIGN KEY로 지정 된 컬럼에서 사용되고 있는 값일 경우 제공하는 컬럼의 값은 삭제 불가
  • 자식 레코드로 사용되지 않는 값은 삭제 가능

2) ON DELETE SET NULL

  • 부모키를 삭제 시 자식 키를 NULL로 변경하는 옵션
CREATE TABLE TEST(
 NO1 NUMBER PRIMARY KEY,
 NO2 VARCHAR2(20) UNIQUE,
 NO3 NUMBER,
 FOREIGN KEY(NO3) REFERENCES USER_GRADE2(GRADE_CODE) ON DELETE SET NULL
 );
  • 삭제가 수행되고, 삭제된 값을 참조할 수는 없으므로 NULL값으로 변경

3) ON DELETE CASCADE

  • 부모 키 삭제 시 자식 키를 가진 행도 함께 삭제

6-4. 서브쿼리를 이용한 테이블 생성

  • 컬럼명, 데이터 타입, 값이 복사되고 제약조건은 NOT NULL만 복사
profile
DREAM STARTER

0개의 댓글