View 질문 0 17 2,031

by dongfa [MySQL] [2023.03.03 13:06:46]


안녕하세요. view 관련 실습을 진행하던 중에 질문이 생겨 여쭤봅니다.

이론적으로 view를 생성하여 수정하는 경우에는 원본 테이블에는 영향이 가지 않는다고 알고 있는데,

alter view monster_view as select * from monster; 구문으로 view의 구조를 변경하고 view에 데이터를 추가하니 원본 테이블에도 데이터가 추가된 것을 확인 할 수 있었습니다. 

혹시 어떻게 된 것인지 설명해주실 수 있을까요?

by 마농 [2023.03.03 13:20:20]

뷰의 "구조"를 변경하는 것은 원본에 영향이 없습니다.
뷰의 "자료"를 변경하는 것은 원본의 자료를 변경하는 것입니다.
http://gurubee.net/lecture/1036


by dongfa [2023.03.03 13:47:18]

여러 제약 사항을 지키는 view는 원본 테이블에 영향을 줄 수 도 있는 것인가요??


by 마농 [2023.03.03 13:53:41]

수정 가능 뷰가 있고, 수정 불가능 뷰가 있습니다.
수정 가능 뷰애 해당되는 제약사항을 만족하다면? 데이터 수정 가능합니다.


by dongfa [2023.03.03 14:12:11]

감사합니다!!


by 우리집아찌 [2023.03.03 13:24:35]

view 어떻게 데이터를 추가 하셨나요?


by dongfa [2023.03.03 13:46:45]

insert into monster_view values (...) 으로 추가했습니다.


by 우리집아찌 [2023.03.03 14:20:04]

view 에 insret 됐다고 원본테이블이 변하지는 않을텐데요.

원본테이블이 all_table에 존재하는지 확인한번 해보세요.


by dongfa [2023.03.03 14:31:50]

다시한번 확인했는데 view에 test 데이터 추가시 원본 테이블에도 추가되어 있는게 확인되었습니다...  


by 우리집아찌 [2023.03.03 14:37:21]

테이블이 아니라 synonym으로 추측됩니다만..


by 우리집아찌 [2023.03.03 14:37:51]

아니면 같은 스키마면 mview 같은것도 가능성이 있네요.


by dongfa [2023.03.03 14:43:15]

simple view인 경우에 원본 테이블의 제약조건과 not null 컬럼을 포함하고 있다면 데이터의 변경 추가 삭제가 가능한 것 아닌가요??


by jkson [2023.03.03 14:47:30]

view를 통해 원본 테이블에 insert, update, delete 가능합니다.


by 우리집아찌 [2023.03.03 15:01:52]

진짜? 테스트 해봐야겠네!


by dongfa [2023.03.03 14:33:40]

그리고 공식 문서에는 alter view로 view의 정의를 변경하는 것이 가능한데, 여러 블로그나 포스팅에는 거의 다 view의 정의를 변경하는 것은 불가능하다고 나와있네요. alter view가 최근들어 새롭게 지원하게 된 변경점인가요?? 


by pajama [2023.03.03 15:00:37]

DB마다 가능여부가 다른것 같은데 mysql은 예전부터 지원해온 것 같습니다.


by 마농 [2023.03.06 08:50:21]

서용하시는 용어를 명확하게 구분하셔야 합니다.
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 구문으로 뷰 생성 및 변경을 하나의 문장으로 가능합니다.


by 마농 [2023.03.03 19:37:17]

뷰를 통한 원본 변경 원래부터 가능했습니다.

뷰는 당연히 안될꺼라는 선입견이 있는 듯요.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입