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;
댓글 없음:
댓글 쓰기