12월 14일 시험대비

안효빈·2022년 12월 13일
2

개인 공부

목록 보기
36/36

ERD보고 테이블 작성, 제약조건 달기

1. 외래키 사용할 때 참조키를 부모 테이블에서 삭제해버리는 경우


자식테이블 생성 시 외래키 제약조건 부여한거 삭제 옵션 지정가능
* 삭제 옵션 : 부모테이블의 값 삭제시 그 데이터를 자식테이블에서 사용하고 있을 경우
그 값을 어떻게 처리할지 지정

- ON DELETE RESTRICTED(기본값) : 자식이 쓰는 데이터값은 무조건 삭제 안됨
- ON DELETE SET NULL : 자식테이블의 데이터값을 NULL로 바꾸고 삭제함
- ON DELETE CASCADE : 자식테이블의 데이터값과 부모의 데이터값을 모두 삭제함
CREATE TABLE MEM (
    GRADE_ID NUMBER REFERENCES MEM_GRADE(GRADE_CODE) ON DELETE SET NULL
);

이러면 부모의 값이 사라질떄 부모의 값을 빌려다 쓰던 자식이 NULL로 바뀜(SET NULL)

2. 외래키 제약조건 주는 법

[표현식]
-- 컬럼명 자료형 [CONSTRAINT 제약조건명] REFERENCES 참조할테이블명[(참조할테이블에있는컬럼명)]
- 참조할컬럼명 생략은 기본키로 되어있을 떄 가능

CREATE TABLE MEM2 (
    GRADE_ID NUMBER REFERENCES MEM_GRADE(GRADE_CODE)
);

REFERENCES 테이블명(컬럼명)

3. CHECK 제약조건 쓰는 법

* CHECK(조건식) 제약조건
해당 컬럼에 들어올 수 없는 값에 대한 조건 제시
조건에 맞는 값만 입력하도록 할 수 있다.
CREATE TABLE MEM_CHECK1 (
    GENDER CHAR(3) CHECK(GENDER IN ('남','여'))
);
강사님이 주신 예
grade char(1) not null check(grade in('A', 'B', 'C'))
unit_price number check(unit_price > 1000000)

4. 시퀀스 사용

    [표현식]
    CREATE SEQUENCE 시퀀스명
    [START WITH 시작숫자] : 시퀀스 시작값(기본값 1)
    [INCREMENT BY 숫자] : 몇씩 증가시킬것인지의 값(기본값 1)
    [MAXVALUE 숫자] : 최대값 지정(기본값 많이 큼)
    [MINVALUE 숫자] : 최소값 지정(기본값 1)
    [CYCLE | NOCYCLE] : 값 순환 여부 지정(기본값 NOCYCLE)
    [NOCACHE | CACHE 바이트 크기] : 캐시메모리 할당량(기본값 CACHE 20)
     * 캐시메모리 :   미리 발생될 값들을 생성해서 저장해두는 공간
                     매번 호출할 대마다 번호를 생성하는 것이 아니라
                     캐시메모리에 미리 생성한 값들을 가져다 씀
                     접속 해제하면 캐시메모리에 미리 만들어놓은 값들 없어짐

옵션 넣는 순서는 상관 없는듯
INCREMENT BY앞에 먼저 쓰고 START WITH를 뒤에 써도 생성됨(오라클은 되는거 확인함)
CREATE SEQUENCE SEQ_EMPNO
START WITH 300
INCREMENT BY 5
MAXVALUE 310
NOCYCLE
NOCACHE;

5. 일단 적어주신거

http://localhost:8090/project/page/aaa.jsp?id=5&name=kkl&age=21&addr=서울
프로토콜 http
Context Path : project
파라미터 이름 : id, name, age, addr

6. 최종점검

CREATE TABLE REPLY (
	REPLY_NO NUMBER NOT NULL,
	BOARD_NO NUMBER REFERENCES BOARD(BOARD_NO) ON DELETE CASCADE,
	REPLY_WRITER VARCHAR2(20) REFERENCES MEMBER(MEMBER_ID) ON DELETE SET NULL,
	REPLY_CONTENT VARCHAR2(4000) NOT NULL,
	REPLY_TIME DATE DEFAULT SYSDATE NOT NULL,
	REPLY_SUPERNO NUMBER DEFAULT 0 NOT NULL
);

+++ 체크쓰는법

ex)

grade char(1) not null check(grade in('A', 'B', 'C'))
unit_price number check(unit_price > 1000000)

+++ 디폴트는 타입선언 옆 

ex)

grade char(1) default 'a'


+++ constraint는 제약조건이름붙이는거 제약조건보다 앞에 오면 됨
+++ 
profile
다들 화이팅

0개의 댓글