Leonardo Go
오라클 강의자료 2011.09.21 (쌍용교육센터) 본문
--2011.09.21
제약조건
1. 테이블에 부적절한 자료가 입력되는 것을 방지
(각 필드마다 여러 쿠칙을 적용)
2. 데이터 베이스 내에 데이터의 정확성을 유지
사용자가 원치않는 데이터를 저장, 수정, 삭제할시에 방지하는 것
3. 컬럼단위, 테이블 단위
차이점 : 컬럼+제약조건(동시에 설정) - 컬럼단위
id varchar2(10) PRIMARY KEY
컬럼을 먼저 생성하고 나중에 제약조건을 설정하는 방식 - 테이블 단위
4. 제약조건의 종류
NOT NULL : 해당 컬럼의 값으로 NULL을 허용하지 않는다.(nn)
UNIQUE : 테이블 내에서 해당 컬럼값은 항상 유일한 값을 가진다.(uq)
PRIMARY KEY : 테이블에서 반드시 존재한다.(NOT NULL+UNIQUE) (pk)
FOREIGN KEY : 해당 컬럼의 닶이 타 컬럼의 값을 참조해야 한다.(fk)
참조되는 컬럼에 없는 값을 입력이 불가능하다.
CHECK : 값의 범위를 지정 (ck)
emp dept
empno : PRIMARY KEY deptno : PRIMARY KEY
ename : NOT NULL dname : CHECK
job : CHECK loc : CHECK
mgr
hiredate
sal
comm
deptno : FOREIGN KEY
5. 형식
1) 이름 부여 (권고) : 테이블명_필드명_제약조건
emp_empno_pk
emp_deptno_fk
emp_ename_nn
emp_job_ck
--컬럼 단위 제약조건
CREATE TABLE mydept1(deptno NUMBER(2) PRIMARY KEY,
dname VARCHAR2(15) CHECK(dname IN('영업','개발','기획')),
loc VARCHAR2(15) CHECK(loc IN('서울','경기','대전')));
--테이블 단위 제약조건
CREATE TABLE mydept2(deptno NUMBER(2)
CONSTRAINT mydept2_deptno_pk PRIMARY KEY,
dname VARCHAR2(15)
CONSTRAINT mydept2_dname_ck CHECK(dname IN('영업','개발','기획')),
loc VARCHAR2(15)
CONSTRAINT mydept2_loc_ck CHECK(loc IN('서울','경기','대전')));
commit;
SELECT table_name, constraint_type, constraint_name, search_condition;
FROM user_constraints WHERE table_name='mydept2';
SELECT table_name, column_name, constraint_name FROM user_cons_columns;
테이블 제작
*******게시판
게시물번호 : PRIMARY KEY
이름 : NOT NULL
이메일
제목 : NOT NULL
내용 : NUT NULL
비번 : NOT NULL
조회수 --자동
작성일 --자동 sysdate
그룹번호 --자동
그룹출력순서--자동
그룹간격 --자동
루트번호(삭제)
깊이(삭제)
*******댓글
댓글번호 : PRIMARY KEY
게시물번호 : FOREIGN KEY
이름 : NOT NULL
내용 : NOT NULL
작성일 --자동
1. 기능
목록출력(페이지 나누기)
내용보기
글쓰기
수정하기 - 숙제
답변하기(댓글달기)
삭제하기
찾기
DROP TABLE reply;
DROP TABLE board;
CREATE TABLE board(no NUMBER
CONSTRAINT board_no_pk PRIMARY KEY,
name VARCHAR2(128)
CONSTRAINT board_name_nn NOT NULL,
email VARCHAR2(50),
subject VARCHAR2(500)
CONSTRAINT board_subject_nn NOT NULL,
content VARCHAR2(4000)
CONSTRAINT board_content_nn NOT NULL,
pwd VARCHAR2(10)
CONSTRAINT board_pwd_nn NOT NULL,
writeday DATE,
readenum NUMBER,
ref NUMBER,
step NUMBER,
jump NUMBER,
root NUMBER,
depth NUMBER);
CREATE TABLE reply(no NUMBER
CONSTRAINT reply_no_pk PRIMARY KEY,
boardno NUMBER
CONSTRAINT reply_boardno_fk REFERENCES board(no),
name VARCHAR2(128)
CONSTRAINT reply_name_nn NOT NULL,
content VARCHAR2(500)
CONSTRAINT reply_content_nn NOT NULL,
writeday DATE);
DROP SEQUENCE board_no_seq;
CREATE SEQUENCE board_no_seq START WITH 1 INCREMENT BY 1;
INSERT INTO board VALUES(board_no_seq.nextval,'홍길동','','오늘은 수요일','조별 숙제는 금요일까지..','1234',SYSDATE,0,0,0,0,0,0);
INSERT INTO board VALUES(board_no_seq.nextval,'홍길동','','오늘은 수요일','조별 숙제는 금요일까지..','1234',SYSDATE,0,1,0,0,0,0);
INSERT INTO board VALUES(board_no_seq.nextval,'홍길동','','오늘은 수요일','조별 숙제는 금요일까지..','1234',SYSDATE,0,2,0,0,0,0);
INSERT INTO board VALUES(board_no_seq.nextval,'홍길동','','오늘은 수요일','조별 숙제는 금요일까지..','1234',SYSDATE,0,3,0,0,0,0);
INSERT INTO board VALUES(board_no_seq.nextval,'홍길동','','오늘은 수요일','조별 숙제는 금요일까지..','1234',SYSDATE,0,4,0,0,0,0);
INSERT INTO board VALUES(board_no_seq.nextval,'홍길동','','오늘은 수요일','조별 숙제는 금요일까지..','1234',SYSDATE,0,5,0,0,0,0);
INSERT INTO board VALUES(board_no_seq.nextval,'홍길동','','오늘은 수요일','조별 숙제는 금요일까지..','1234',SYSDATE,0,6,0,0,0,0);
INSERT INTO board VALUES(board_no_seq.nextval,'홍길동','','오늘은 수요일','조별 숙제는 금요일까지..','1234',SYSDATE,0,7,0,0,0,0);
INSERT INTO board VALUES(board_no_seq.nextval,'홍길동','','오늘은 수요일','조별 숙제는 금요일까지..','1234',SYSDATE,0,8,0,0,0,0);
INSERT INTO board VALUES(board_no_seq.nextval,'홍길동','','오늘은 수요일','조별 숙제는 금요일까지..','1234',SYSDATE,0,9,0,0,0,0);
INSERT INTO board VALUES(board_no_seq.nextval,'홍길동','','오늘은 수요일','조별 숙제는 금요일까지..','1234',SYSDATE,0,10,0,0,0,0);
COMMIT;
'Database > Oracle' 카테고리의 다른 글
오라클 강의자료 2011.09.26 (쌍용교육센터) (0) | 2011.09.26 |
---|---|
테이블의 제약조건 (0) | 2011.09.21 |
오라클 강의자료 2011.09.20 (쌍용교육센터) (0) | 2011.09.20 |
오라클 강의자료 2011.09.19 (쌍용교육센터) (0) | 2011.09.19 |
오라클 강의자료 2011.09.16 (쌍용교육센터) (0) | 2011.09.19 |