2009. 11. 27.

DB test

table















2009.11.27

2장

문제

제품 가격이 8만원 이상 select문

select prodName, company, amount
from         productTbl
where cost>8
;


3장

1. 인덱스
idx_memberTbl_memberName 은 회원 테이블의 회원 이름 열로 생성된 색인이 된다.

create index idx_memberTbl_memberName on memberTbl (memberName);

2. 뷰

뷰테이블 생성

create view  uv_productTbl as
select   *
from           productTbl
where   cost>10
;

select *
from uv_productTbl
;

3. 프로시저

두 쿼리를 하나의 저장 프로시저로

create procedure myProc as
select *
from         memberTbl
where memberName = '당탕이'
;

select *
from         productTbl
where prodName = '냉장고'
;

프로시저 실행법
exec myProc

4. 트리거

회원 테이블에 입력

insert into memberTbl values ('지승호', '030202-5555555', '서울 양천구 목동')
;

변경

update memberTbl
set         addr = '서울 은평구 증산동'
where memberName = '지승호'
;

삭제

delete memberTbl
where memberName = '지승호'
;

위에서 문제점) select * from memberTbl; 로 데이터가 삭제되었는지 확인해보자.
그러나 '지승호'가 예전에 회원이었다는 정보는 그 어디에도 등록되지 않는다.
위와 같은 사례를 방지하기 위하여 지워진 데이터와 날짜까지 기록해 보자.

create table deletedMemberTbl
( memberName nchar(5),
jumiNo char(14),
addr         nvarchar(30),
modifyDate datetime  -- 삭제한 날짜/시간
);

회원 테이블에 delete 작업이 일어나면 백업 테이블(deletedMemberTbl)에 지워진 데이터가 기록되는 트리거를 생성

create trigger   trg_deletedMemberTbl -- 트리거 이름
on                  memberTbl -- 트리거를 부착할 테이블
AFTER delete -- 삭제 후에 작동하도록 지정
as
-- deleted 테이블의 내용을 백업 테이블에 삽입
insert into       deletedMemberTbl
select      memberName, juminNo, addr, Getdate() from deleted;

당탕이를 삭제해보자

delete  memberTbl
where  memberName = '당탕이';

확인


select       *
from   memberTbl;
select       *
from         deletedMemberTbl;


댓글 없음:

댓글 쓰기