본문 바로가기
Database/Oracle

[Oracle] 제약조건 CONSTRAINT

by dev수니 2021. 8. 12.
반응형

제약조건 CONSTRAINT


NOT NULL

-- 해당 컬럼에 null값이 들어오지 못하도록 함


UNIQUE

-- null은 허용하지만 중복은 저장하지 못함


PRIMARY KEY

-- null과 중복을 저장하지 못함, 테이블에 저장된 데이터를 고유하게 식별하기 위한 키를 정의, 인덱싱 기능, FOREIGN KEY의 원본 테이블의 필드


DEFAULT

-- null값이 입력될 경우 default로 정의된 값이 자동으로 입력


CHECK

-- 컬럼에 정해진 데이터 조건을 지정하여 그 범위내에 데이터만 입력

 

 

 

 

-- 테이블 만들기

CREATE TABLE tb_student(
    stu_idx NUMBER(5) NOT NULL,   -- 99999까지
    stu_name VARCHAR2(20) NOT NULL,
    stu_age NUMBER(3) NOT NULL,
    stu_gender VARCHAR2(6) NOT NULL,  -- CHAR(1) : 'm' 아니면 'w' 둘 중 하나만 들어가게 만듬
    stu_tel VARCHAR2(20),
    CONSTRAINT stu_gender CHECK (stu_gender IN ('male','female'))  -- 제약조건
);

 

 


-- 제약조건 삭제

ALTER TALBE tb_student DROP CONSTRAINT STU_GENDER; 

 

 

-- stu_gender의 데이터 타입을 VARCHAR2(6)으로 변경하고 CHECK 제약조건을 male 또는 female만 입력받도록 변경

ALTER TABLE tb_student MODIFY(
    stu_gender VARCHAR(6) CHECK(stu_gender IN('male', 'female'))
);

 

 

 

 

/*
    오라클에서는 여러필드에 primray key를 적용할 수 있다
    1개의 테이블에 primary key는 하나의 이름에만 여러개 필드를 적용할 수 있음
    이것은 테이블 create 시에만 가능 / alter 시에는 불가
*/

--  CREATE 시 기본키(pk_userid)를 한개 이상(mem_userid, mem_idx) 줄 수 있음.

CREATE TABLE tb_member(
    mem_idx NUMBER(7) UNIQUE NOT NULL,
    mem_userid VARCHAR2(20) UNIQUE NOT NULL,
    mem_userpw VARCHAR2(20) NOT NULL,
    mem_name VARCHAR2(20) NOT NULL,
    mem_gender VARCHAR2(10),
    mem_email VARCHAR2(50) UNIQUE,
    mem_hp VARCHAR2(20),
    mem_zipcode CHAR(5),
    mem_address1 VARCHAR2(100),
    mem_address2 VARCHAR2(100),
    mem_address3 VARCHAR2(100),
    mem_regdate DATE DAFAULT SYSDATE,
    CONSTRAINT pk_userid PRIMARY KEY(mem_userid, mem_idx), 
    CONSTRAINT ck_gender CHECK(mem_gender in('남자','여자'))
);

ALTER TABLE tb_member ADD PRIMARY KEY(mem_hp);   -- (x) table can have only one primary keyalter 시에는 불가

 

-- tb_member 테이블을 참조하는 tb_order 테이블

CREATE TABLE tb_order (
    ord_no VARCHAR2(10),
    ord_userid VARCHAR2(20),
    ord_product VARCHAR2(50) NOT NULL,
    ord_count NUMBER(5),
    ord_price NUMBER(7),
    ord_regdate DATE DEFAULT SYSDATE,
    CONSRAINT pk_no PRIMARY KEY(ord_no),
    CONSRAINT fk_userid FOREIGN KEY(ord_userid) REFERENCES tb_member(mem_userid)
);

 

반응형

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

[Oracle] 오라클 instr() 함수  (0) 2021.08.12
[Oracle] 데이터 타입  (0) 2021.08.12

댓글