728x90
CHECK
컬럼에 기록될 수 있는 값에 대한 조건을 설정해둘 수 있다.
CHECK (조건식)
CREATE TABLE MEM_CHECK(
MEM_NO NUMBER NOT NULL,
MEM_ID VARCHAR2(20) NOT NULL,
MEM_PWD VARCHAR2(20) NOT NULL,
MEM_NAME VARCHAR2(20) NOT NULL,
GENDER CHAR(3) CHECK(GENDER IN ('남', '여')),
PHONE VARCHAR2(15),
EMAIL VARCHAR2(30),
MEM_DATE DATE NOT NULL
);
INSERT INTO MEM_CHECK
VALUES (1, 'user01', 'pass01', '홍길동', '남', NULL, NULL, SYSDATE);
-- >> 회원가입일을 항상 SYSDATE 값으로 받으려면, 테이블 생성시 지정 가능
-- 특정 컬럼에 들어올 값에 대한 기본값 설정 => 제약 조건은 아님
CREATE TABLE MEM_CHECK(
MEM_NO NUMBER NOT NULL,
MEM_ID VARCHAR2(20) NOT NULL,
MEM_PWD VARCHAR2(20) NOT NULL,
MEM_NAME VARCHAR2(20) NOT NULL,
GENDER CHAR(3) CHECK(GENDER IN ('남', '여')),
PHONE VARCHAR2(15),
EMAIL VARCHAR2(30),
MEM_DATE DATE DEFAULT SYSDATE NOT NULL
);
728x90
PRIMARY KEY(기본키)
=> UNIQUE + NOT NULL
테이블에서 각 행들의 정보를 유일하게 식별할 수 있는 컬럼에 부여하는 제약조건으로,
각 행들을 구분할 수 있는 식별자의 역할
ex) 회원번호, 주문번호, 사번, 학번, 예약번호 , ...
=> 중복되지 않고(UNIQUE), 값이 존재(NOT NULL)해야만 하는 컬럼에 부여
CREATE TABLE MEM_PRIMARYKEY1(
MEM_NO NUMBER CONSTRAINT MEM_PK PRIMARY KEY, -- 컬럼레벨 방식
MEM_ID VARCHAR2(20) NOT NULL UNIQUE,
MEM_PWD VARCHAR2(20) NOT NULL,
MEM_NAME VARCHAR2(20) NOT NULL,
GENDER CHAR(3) CHECK(GENDER IN ('남', '여')),
PHONE VARCHAR2(15),
EMAIL VARCHAR2(30)
-- CONSTRAINT MEM_PK PRIMARY KEY(MEM_NO) -- 테이블레벨 방식
);
INSERT INTO MEM_PRIMAIRY1 VALUES (1, 'user01', 'pass01', '홍길동', '남', NULL, NULL);
INSERT INTO MEM_PRIMAIRY1 VALUES (1, 'user02', 'pass02', '김길동', NULL, NULL, NULL);
-- 기본키 컬럼에 중복으로 인한 오류 발생
-- ORA-00001: unique constraint (DDL.MEM_PK) violated
INSERT INTO MEM_PRIMAIRY1 VALUES (NULL, 'user02', 'user02', '김길동', NULL, NULL, NULL);
-- 기본키 컬럼에 NULL 값으로 인한 오류 발생
-- ORA-01400: cannot insert NULL into ("DDL", "MEM_PRIMARYKEY1"."MEM_NO")
INSERT INTO MEM_PRIMAIRY1 VALUES (2, 'user02', 'pass02', '김길동', NULL, NULL, NULL);
>> 두 개 이상의 컬럼을 PRIMARY KEY로 설정하기
CREATE TABLE MEM_PRIMARYKEY2(
MEM_NO NUMBER PRIMARY KEY,
MEM_ID VARCHAR2(20) PRIMARY KEY,
MEM_PWD VARCHAR2(20) NOT NULL,
MEM_NAME VARCHAR2(20) NOT NULL,
GENDER CHAR(3) CHECK(GENDER IN ('남', '여')),
PHONE VARCHAR2(15),
EMAIL VARCHAR2(30)
);
-- 오류 발생 ORA-02260: table can have only on primary key
-- 한 테이블당 한 개의 컬럼만 설정 가능
-- 두 컬럼을 하나로 묶어서 PRIMARY KEY 하나로 설정 가능
CREATE TABLE MEM_PRIMARYKEY2(
MEM_NO NUMBER,
MEM_ID VARCHAR2(20),
MEM_PWD VARCHAR2(20) NOT NULL,
MEM_NAME VARCHAR2(20) NOT NULL,
GENDER CHAR(3) CHECK(GENDER IN ('남', '여')),
PHONE VARCHAR2(15),
EMAIL VARCHAR2(30),
PRAMARY KEY (MEM_NO, MEM_ID) -- 컬럼을 묶어서 PRIMARY KET 하나로 설정 => 복합키
);
728x90