제약조건

JiyN·2023년 9월 11일
0
post-custom-banner

제약조건의 단계

  • 도메인
  • 엔티티
  • 릴레이션

도메인 제약조건

도메인: 유효한 값의 범위
도메인 제약조건: 컬럼단위의 유효한 값의 범위를 달아주는 것

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

  • NOT NULL : 값을 반드시 넣어야 하는 경우
  • DEFAULT : 사용자가 전달하는 것이 아닌, 알아서 값을 가져가는 경우 (날짜, 조회수 ...)
  • CHECK : 도메인 범위 체크

NOT NULL 제약조건

---제약조건 설정---
CREATE TABLE TEST
(
	ID VARCHAR2(50) NOT NULL,
    EMAIL VARCHAR2(200) NULL,
    PHONE CHAR(13) NOT NULL
)
(OR)
ALTER TABLE TEST MODIFY EMAIL VARCHAR2(200) NOT NULL; 
(OR)
'편집 도구'에서 '널이 아님' 체크
---테스트---
INSERT INTO TEST(ID) VALUES('222'); //오류, PHONE 입력을 안함

DEFAULT 제약조건

등록일, 조회수, 관리자가 부여하는 비번 등
굳이 직접 입력할 필요 없는 컬럼들

--적용방법--
CREATE TABLE TEST
(
	ID VARCHAR2(50) NULL,
    EMAIL VARCHAR2(200) NULL,
    PHONE CHAR(13) NULL,
    PWD VARCAR2(200) DEFAULT '111'
)
<OR>
ALTER TABLE TEST MODIFY EMAIL VARCHAR2(200) DEFAULT '111';
<OR>
'편집도구' 열에서 '기본값' 설정
함수도 사용 가능 
EX REGDATE(등록일) 기본값 : SYSTIMESTAMP

CHECK 제약조건⭐

CREATE TABLE TEST
(
	ID VARCHAR2(50) NULL,
    PHONE VARCHAR2(200) CHECK(PHONE LIKE '010-%-____') NOT NULL,
    EMAIL VARCHAR2(500) NULL
)
<OR>
ALTER TABLE TEST ADD CONSTRAINT 
CK_TEST_PHONE CHECK(PHONE LIKE '010-%-____');
<OR>
테이블 편집 > 제약조건 > '➕' > 새 검사 제약 조건
--실행--
INSERT INTO TEST(ID, PHONE, EMAIL) 
VALUES('AA', 'AA.A.COM','1111-222'); // 오류발생
  • 편집기 사용
  • 제약조건 체크
  • 제약조건 주의사항
    이전에 입력한 데이터가 제약조건에 맞는지 확인

정규식을 이용한 체크 제약조건

좀 더 정밀하게 제약하고 싶은 경우 사용

혹은

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

MEMBER테이블 제약조건 확인

SELECT *FROM user_constraints
WHERE TABLE_NAME='MEMBER';

ENTITIY 제약조건

PRIMARY KEY와 UNIQUE

중복된 레코드가 없도록 제한한다.

  • 식별키/식별컬럼 이용
  1. PRIMARY KEY : 식별키 (기본키, NULL X )
  2. UNIQUE 제약조건 : (중복불허, NULL O)

PRIMARY KEY

CREATE TABLE NOTICE
(
	ID NUMBER PRIMARY KEY,			-- 기본키 제약조건
    PHONE VARCHAR2(300) /NOT NULL,	-- NOT NULL
    WRITER_ID VARCHAR2(50) NOT NULL UNIQUE, -- NOT NULL/UNIQUE한 사람이 한번씩
    CONTENT VARCHAR2(4000),
    REGDATE DATE DEFAULT SYSDATE,	-- 기본값 현재 날짜
    HIT NUMBER DEFAULT 0 			-- 기본값 0
)

--기본키 제약조건에 이름을 설정하고 싶은 경우--
ID NUMBER CONSTRAINT NOTICE_ID_PK PRIMARY KEY

--마지막으로 빼서 한번에 설정하는 경우--
CREATE TABLE NOTICE
(
	ID NUMBER,
    PHONE VARCHAR2(300) /NOT NULL,	-- NOT NULL
    WRITER_ID VARCHAR2(50) NOT NULL, -- NOT NULL/UNIQUE
    CONTENT VARCHAR2(4000),
    REGDATE DATE DEFAULT SYSDATE,	-- 기본값 현재 날짜
    HIT NUMBER DEFAULT 0 			-- 기본값 0

CONSTRAINT NOTICE_ID_PK PRIMARY KEY(ID),
CONSTRAIN NOTICE_ID_UK UNIQUE(WRITER_ID)
)

--ALTER 활용--
ALTER TABLE NOTICE
ADD CONSTRAINT NOTICE_ID_PK PRIMARY KEY(ID);

ALTER TABLE NOTICE
ADD CONSTRAINT NOTICE_WRITER_UK UNIQUE(WRITER_ID);
  • 편집기 활용
    테이블편집 > 제약조건 > '➕' > 새 고유 제약 조건

시퀀스(일련번호)

중복 X, 계속해서 증가
접속 > 시퀀스 > 새시퀀스

다음으로 시작 : 시작번호 (공란 = 1)
증분 : 증가분 (공란 = 1)
캐시 : 번호 미리 뽑아두기 (공란 = 20)
주기 : 번호 순환 여부
정렬 : 정렬여부

  • 쿼리문

  • 사용

INSERT INTO NOTICE(ID, TITLE, WRITER_ID)
VALUES(NOTICE_ID_SEQ.NEXTVAL, '시퀀스 테스트', 'apple');
  • 테이블 편집기 이용
    ID열 선택 > 유형: 열시퀀스

    만들어둔 시퀀스 선택
  • 사용
    INSERT INTO NOTICE(TITLE, WRITER_ID)
    VALUES('시퀀스 테스트', 'apple'); // ID 자동 생성
profile
공부블로거
post-custom-banner

0개의 댓글