도메인: 유효한 값의 범위
도메인 제약조건: 컬럼단위의 유효한 값의 범위를 달아주는 것
---제약조건 설정---
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 입력을 안함
등록일, 조회수, 관리자가 부여하는 비번 등
굳이 직접 입력할 필요 없는 컬럼들
--적용방법--
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
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';
중복된 레코드가 없도록 제한한다.
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');
INSERT INTO NOTICE(TITLE, WRITER_ID)
VALUES('시퀀스 테스트', 'apple'); // ID 자동 생성