[DB] 테이블 생성
참조키가 지워질 때 같이 삭제하기 - ON DELETE CASCADE
ON DELETE CASCADE
: 위에서 부터 아래까지 전부 지운다.CREATE TABLE MEMBER ( . . GRADENO NUMBER(2) DEFAULT 1 REFERENCES GRADE(GRADENO) ON DELETE CASCADE );
참조키가 지워질 때 지워지지 않고 NULL로 저장 - ON DELETE SET NULL
CREATE TABLE MEMBER (
.
.
GRADENO NUMBER(2) DEFAULT 1 REFERENCES GRADE(GRADENO) ON DELETE SET NULL
);
테이블 생성 - 일반 게시판 스키마
- 객체 삭제
- 객체 생성(명세서에 맞게 테이블 생성)
- 샘플데이터 넣기
-- 일반 게시판 테이블 스키마
-- 1. 객체 제거
-- CASCADE -> 다음 단계로 떨어진다. - 지우려는 것과 연결되어 있는 것을 지우자. (=> CONSTRAINTS)
-- CONSTRAINTS -> 제약 조건
-- PURGE -> 지우면 휴지통에 담기게 된다. 휴지통에 안 담고 지우자
DROP TABLE board CASCADE CONSTRAINTS PURGE;
DROP SEQUENCE board_seq; -- DROP 하게 되면 기본 값은 1
-- 2. 객체 생성
CREATE TABEL board (
no NUMBER PRIMARY KEY, -- null이 아니고 중복이 되지 않는 항목(칼럼)
title VARCHAR2(300) NOT NULL, -- 한글은 3byte, 300 = 한글 100자 / NOT NULL -> 비워져 있으면 안된다.
content VARCHAR2(2000) NOT NULL, -- 2000byte
writer VARCHAR2(30) NOT NULL, -- 30byte, 한글 10자
writeDate DATE DEFAULT sysdate, -- DEFAULT = 등록할 필요가 없다.
hit NUMBER DEFAULT 0, -- 길이 지정 안하면 LONG 타입
pw VARCHAR2(20) NOT NULL -- 20byte, 패스워드 20자 까지
);
CREATE SEQUENCE board_seq;
-- 3. 샘플 데이터 넣기
INESRT INTO board(no, title, content, writer, pw)
VALUES(board_seq.nextval, 'java', 'program', 'won', '1111');
INSERT INTO board(no, title, content, writer, pw)
VALUES(board_seq.nextval, 'oracle', 'DB', 'Feel', '1111');
-- 4. 조회하기
SELECT * FROM board;
테이블 생성 - 회원관리 테이블
-- 회원등급 & 회원 테이블
-- 1. 객체 제거
-- FK 테이블을 먼저 지우고 PK는 나중에 지운다.
DROP TABLE member CASCADE CONSTRAINTS PURGE;
DROP TABLE grade CASCADE CONSTRAINTS purge;
-- 2. 객체 생성
-- PK 테이블을 먼저 만들고 FK 테이블을 나중에 만든다.
CREATE TABLE grade (
gradeNo number(2) PRIMARY KEY,
gradeName VARCHAR2(20) not null
);
CREATE TABLE member (
id VARCHAR2(40) PRIMARY key,
pw VARCHAR2(20) NOT NULL,
name VARCHAR2(30) NOT NULL,
gender VARCHAR2(6) NOT NULL check(gender in('남자','여자')), -- (gender = '남자' or gender = '여자')
birth date NOT NULL,
email varchar2(30) not null,
tel VARCHAR2(13),
regDate date DEFAULT sysdate,
conDate date DEFAULT sysdate,
status VARCHAR2(6) DEFAULT '정상' check(status in('정상','제재','탈퇴','휴면')),
photo VARCHAR2(200),
newMsgCnt NUMBER DEFAULT 0,
-- REFERENCES -> foreign key
gradeNo NUMBER(2) DEFAULT 1 REFERENCES grade(gradeNo)
-- ON DELETE CASCADE
-- ON DELETE SET NULL
);
create SEQUENCE memberNo_seq;
-- 3. 샘플 데이터
-- 1) PK 데이터를 먼저 넣는다. - grade
insert into grade -- 테이블 이름만 쓰는 경우는 모든 컬럼에 대해서 순서대로 데이터를 입력할 때 생략 가능
values (1,'일반회원');
insert into grade -- 테이블 이름만 쓰는 경우는 모든 컬럼에 대해서 순서대로 데이터를 입력할 때 생략 가능
values (2,'쇼핑몰관리자');
insert into grade
values (9,'관리자');
commit;
-- 2) FK 데이터를 PK 뒤에 넣는다. - member
-- 일반 회원 가입
-- 관리자 등록
insert into member(id, pw, name, gender, birth, tel, email, photo, gradeNo)
values ('admin','1111','관리자','남자','1992-08-11','010-2222-3333', 'test@test.com', '/update/member/admin.jpg', 9);
commit;
insert into member(id, pw, name, gender, birth, tel, email, photo)
values ('test','1111','테스트','남자','1999-01-01','010-1234-1234', 'shop@shop.com', '/update/member/test.jpg');
-- 쇼핑몰 관리자 가입
insert into member(id, pw, name, gender, birth, tel, email, photo, gradeNo)
values ('shop','1111','쇼핑몰 관리자','여자','1999-01-01','010-1234-1234', 'admin@admin.com', '/update/member/test.jpg', 2);
-- 4. 조회하기
select * from grade;
select * from member;
select m.email, m.pw, m.name, m.gender, m.birth, m.tel, m.regdate, m.condate, m.status, m.photo, g.gradeNo
from member m, grade g where m.gradeNo = g.gradeNo;
commit;
테이블 생성 - 공지사항 테이블
-- 게시판 스키마 작성
-- 삭제
DROP TABLE notice CASCADE CONSTRAINTS purge;
DROP SEQUENCE notice_seq;
-- 테이블 생성
CREATE TABLE notice (
no number PRIMARY KEY,
title VARCHAR2(300) NOT NULL,
content VARCHAR2(2000) NOT NULL,
startDate date DEFAULT sysdate,
endDate date DEFAULT '9999-12-30',
writeDate date DEFAULT sysdate,
updateDate date DEFAULT sysdate
);
CREATE SEQUENCE notice_seq;
-- 샘플 데이터
insert into notice (no, title, content)
VALUES (notice_seq.nextval,'공지사항 샘플', '공지사항 샘플입니다.');
commit;
-- 데이터 조회
select * from notice;