공부/데이터베이스

[데이터베이스] 제약조건

ghhong 2021. 11. 11. 09:46

제약조건 (도메인 -> 엔티티 -> 릴레이션)

도메인 제약조건 : 속성에 도메인이 아닌 값이 올 수 없도록 하는 제약조건

 

NOT NULL

--생성

CREATE TABLE TEST

(

           ID VARCHAR2(50) NOT NULL,

           EMAIL VARCHAR2(200) NULL,

           PHONE CHAR(13) NOT NULL

)

--수정

ALTER TABLE TEST MODIFY EMAIL VARCHAR2(200) NOT NULL;

 

DEFAULT

--생성

CREATE TABLE TEST

(

           ID VARCHAR2(50) NOT NULL,

           EMAIL VARCHAR2(200) NULL,

           PHONE CHAR(13) NOT NULL,

           PWD VARCHAR2(200) DEFAULT ‘111

-- 등록일(SYSTIMESTAMP), 조회수(0), 관리자가 부여하는 비밀번호 등

)

--수정

ALTER TABLE TEST MODIFY EMAIL VARCHAR2(200) DEFAULT ‘111’;

 

CHECK

--생성

CREATE TABLE TEST

(

           ID VARCHAR2(50) NULL,

           EMAIL VARCHAR2(200) CHECK(PHONE LIKE ‘010-%-____’) NOT NULL ,

           PHONE CHAR(13) NULL,

)

--수정

ALTER TABLE TEST ADD CONSTRAINT CK_TEST_PHONE CHECK(PHONE LIKE ‘010-%-____’);

 

정규식 사용

REGEXP_LIKE(PHONE, ‘01[01]-\d{3,4}-\d{4}’)

ALTER TABLE MEMBER ADD CONSTRAINT MEMBER_PHONE_CHK1 CHECK(REGEXP_LIKE(PHONE, ‘^01[01]-\d{3,4}-\d{4}$’)); --추가하려면 기존의 테이블의 레코드들도 모두 만족해야한다.

--정규식 시작 : ^ : $  -> 안 쓰면 앞뒤로 다른 것들이 있어도 입력된다.

--삭제

ALTER TABLE MEMBER DROP CONSTRAINT MEMBER_PHONE_CHK1;

 

적용된 제약조건 확인

SELECT * FROM user_constratints where TABLE_NAME = ‘MEMBER’;

 

엔티티 제약조건

PRIMARY KEY, UNIQUE

PRIMARY KEY : 식별할 수 있는 컬럼 : 식별컬럼, 식별키를 갖고 있는 컬럼 -> 중복 X, NULL X

UNIQUE : 중복 X, NULL O

--생성

CREATE TABLE NOTICE

(

           ID NUMBER NUMBER CONSTRAINT NOTICE_ID_PK PRIMARY KEY, --직접 만든 PK제약조건

           TITLE VARCHAR2(300) NOT NULL,

           WRITER_ID VARCHAR2(50) NOT NULL UNIQUE,

           CONTENT VARCHAR2(4000),

           REGDATE DATE DEFAULT SYSDATE,

           HIT NUMBER DEFAULT 0

)

=

CREATE TABLE NOTICE

(

           ID NUMBER NUMBER, --직접 만든 PK제약조건

           TITLE VARCHAR2(300) NOT NULL,

           WRITER_ID VARCHAR2(50) NOT NULL,

           CONTENT VARCHAR2(4000),

           REGDATE DATE DEFAULT SYSDATE,

           HIT NUMBER DEFAULT 0

           CONSTRAINT NOTICE_ID_PK PRIMARY KEY(ID),

           CONSTRAINT NOTICE_WRITER_ID_UK UNIQUE(WRITER_ID)

)

 

--수정

ALTER TABLE NOTICE

ADD CONSTRAINT NOTICE_ID_PK PRIMARY KEY(ID); --아이디에 PK제약조건 추가

ALTER TABLE NOTICE

ADD CONSTRAINT NOTICE_WIRTER_UK UNIQUE(WRITER_ID); --WRITER_ID에 유니크제약조건 추가

 

시퀀스(일련번호)

CREATE SEQUENCE NOTICE_ID_SEQ INCREMENT BY 1 START WITH 1;

INSERT INTO NOTICE(ID, TITLE, WRITER_ID)

VALUES(NOTICE_ID_SEQ.NEXTVAL, ‘HELLO’, ‘GEONHO’);

COMMIT;