--뷰 테이블 생성
create or replace view view_notInline
as select * from employees
where department_id=100;
-- department_id가100인 사람 6명
select * from view_notinline;
--department_id가 100인 사람의 salary가1200 이상인 사람들의 department_id를 50으로 변경
--department_id가 100인 사람은 모두 salary가1200이사이여서 모두 id가 50으로 변경
update view_notinline set department_id= 50 where salary>=1200;
--update후에 department_id가 100인 사람0명
select * from view_notinline;
그런데 문제는 여기서부터입니다
select * from employees
where department_id=100;
일때 department_id 100값은 50으로 변경되어서 100의 값은 나오지않습니다
질문입니다..
view테이블은 보여주는 테이블로만 알고있는데 왜 employees 테이블의 값까지 변경을 해주는걸까요?
보여주기만 하는 게 아니라 그런겁니다.
뷰 문법 확인하시구요.
http://www.gurubee.net/lecture/1036
with read only 옵션을 안 주면 update 가능한 조건을 지켜주면 update도 가능합니다.
가상 테이블이라고 하신 게 아니고 '가상 테이블이라 생각하면 된다' 라고 하셨죠.
일반적인 뷰는 미리 정의된 쿼리라 생각하시면 됩니다.
a테이블과 b테이블이 항상 조인형태로만 사용된다면 이러한 쿼리를 c라는 뷰로 만들어놓으면
개발할 때 a, b 테이블을 굳이 조인하는 쿼리를 만들지 않고 c 뷰를 사용하면 되니까
개발 속도도 높아질 거구요.
업무를 잘 아는 개발자가 뷰를 미리 만들어놓으면 그 업무를 잘 모르는 개발자가 개발할 때
굳이 이 테이블 저 테이블 조인하지 않고도 뷰만 사용하면 되니 편하겠죠.
뷰를 만들어놓고 특정 사용자에게 특정 뷰만 조회할 수 있게하면 보안상으로도 유리해질 수 있겠구요.
결론적으로 뷰는 미리 정의된 쿼리이고 직접적으로 원본 테이블을 액세스하게 되므로
UPDATE할 수 있는 조건이 갖추어지면 UPDATE도 가능합니다.