안녕하세요. view 관련 실습을 진행하던 중에 질문이 생겨 여쭤봅니다.
이론적으로 view를 생성하여 수정하는 경우에는 원본 테이블에는 영향이 가지 않는다고 알고 있는데,
alter view monster_view as select * from monster; 구문으로 view의 구조를 변경하고 view에 데이터를 추가하니 원본 테이블에도 데이터가 추가된 것을 확인 할 수 있었습니다.
혹시 어떻게 된 것인지 설명해주실 수 있을까요?
뷰의 "구조"를 변경하는 것은 원본에 영향이 없습니다.
뷰의 "자료"를 변경하는 것은 원본의 자료를 변경하는 것입니다.
http://gurubee.net/lecture/1036
여러 제약 사항을 지키는 view는 원본 테이블에 영향을 줄 수 도 있는 것인가요??
수정 가능 뷰가 있고, 수정 불가능 뷰가 있습니다.
수정 가능 뷰애 해당되는 제약사항을 만족하다면? 데이터 수정 가능합니다.
감사합니다!!
view 어떻게 데이터를 추가 하셨나요?
view 에 insret 됐다고 원본테이블이 변하지는 않을텐데요.
원본테이블이 all_table에 존재하는지 확인한번 해보세요.
다시한번 확인했는데 view에 test 데이터 추가시 원본 테이블에도 추가되어 있는게 확인되었습니다...
insert into monster_view values (...) 으로 추가했습니다.
테이블이 아니라 synonym으로 추측됩니다만..
view를 통해 원본 테이블에 insert, update, delete 가능합니다.
진짜? 테스트 해봐야겠네!
아니면 같은 스키마면 mview 같은것도 가능성이 있네요.
simple view인 경우에 원본 테이블의 제약조건과 not null 컬럼을 포함하고 있다면 데이터의 변경 추가 삭제가 가능한 것 아닌가요??
그리고 공식 문서에는 alter view로 view의 정의를 변경하는 것이 가능한데, 여러 블로그나 포스팅에는 거의 다 view의 정의를 변경하는 것은 불가능하다고 나와있네요. alter view가 최근들어 새롭게 지원하게 된 변경점인가요??
DB마다 가능여부가 다른것 같은데 mysql은 예전부터 지원해온 것 같습니다.
서용하시는 용어를 명확하게 구분하셔야 합니다.
1. 뷰의 정의라 함은 뷰의 구조, 뷰 자체를 말하는 것이고.
- 뷰 자체를 변경하는 것은 원본에 영향을 주지 않습니다.
2. 뷰의 자료를 변경하는 것은
- 뷰에는 자료가 없기 때문에 원본의 자료를 변경하는 것입니다.
3. Alter view 구문은
- 구문 자체는 사용하는 DBMS 의 종류와 버전에 따라 다를 수 있는데.
- MySQL 5.7 메뉴얼에도 ALTER VIEW 구문이 있는 걸로 뵈서는 원래부터 있던 구문인 듯 합니다.
- MSSQL 이나 MySQL 등은 ALTER VIEW 구문으로 뷰를 변경합니다.
- MSSQL 이나 MySQL 은 ALTER VIEW 와 CREATE VIEW 가 따로 있지만.
- 오라클의 경우에는 CREATE OR REPLACE VIEW 구문으로 뷰 생성 및 변경을 하나의 문장으로 가능합니다.
뷰를 통한 원본 변경 원래부터 가능했습니다.
뷰는 당연히 안될꺼라는 선입견이 있는 듯요.