Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL 뷰(View) 업데이트 시 기본 테이블과 연관 뷰도 함께 갱신될까?

뷰를 업데이트하면 기본 테이블에도 반영될까?

네, 그렇습니다. MySQL에서 뷰(View)의 값을 업데이트하면 해당 변경 사항이 기본 테이블(Base Table)과 그 테이블을 기반으로 생성된 다른 연관 뷰들에도 동시에 반영됩니다.

뷰는 실제 데이터를 저장하는 물리적 객체가 아니라 기본 테이블을 참조하는 가상 테이블이기 때문입니다. 따라서 뷰를 통해 데이터를 수정하면 결국 원본 테이블의 데이터가 변경되고, 이를 참조하는 모든 뷰에도 자동으로 적용됩니다.

아래 예제를 통해 이를 확인해 보겠습니다.

1. 예제 테이블: student_info

다음과 같은 데이터를 가진 student_info 테이블이 있다고 가정합니다.

mysql> Select * from student_info;
+------+---------+------------+------------+
| id   | Name    | Address    | Subject    |
+------+---------+------------+------------+
| 101  | YashPal | Amritsar   | History    |
| 105  | Gaurav  | Chandigarh | Literature |
| 125  | Raman   | Shimla     | Computers  |
| NULL | Ram     | Jhansi     | Computers  |
+------+---------+------------+------------+
4 rows in set (0.00 sec)

2. 기본 테이블 기반의 뷰 'Info'

student_info 테이블을 기반으로 생성한 뷰 Info의 내용은 다음과 같습니다.

mysql> Select * from Info;
+------+---------+------------+
| Id   | Name    | Subject    |
+------+---------+------------+
| 101  | YashPal | History    |
| 105  | Gaurav  | Literature |
| 125  | Raman   | Computers  |
| NULL | Ram     | Computers  |
+------+---------+------------+
4 rows in set (0.00 sec)

3. 뷰 'Info' 업데이트하기

이제 아래 쿼리로 뷰 Info의 값을 업데이트해 보겠습니다.

mysql> Update info set id = 130 where Name = 'Ram';
Query OK, 1 row affected (0.88 sec)

mysql> Select * from Info;
+------+---------+------------+
| Id   | Name    | Subject    |
+------+---------+------------+
| 101  | YashPal | History    |
| 105  | Gaurav  | Literature |
| 125  | Raman   | Computers  |
| 130  | Ram     | Computers  |
+------+---------+------------+
4 rows in set (0.00 sec)

위 결과를 보면 뷰 Info에서 Ram의 id가 130으로 성공적으로 변경된 것을 확인할 수 있습니다.

4. 기본 테이블 확인하기

그렇다면 기본 테이블인 student_info에는 어떤 변화가 있었을까요?

mysql> Select * from student_info;
+------+---------+------------+------------+
| id   | Name    | Address    | Subject    |
+------+---------+------------+------------+
| 101  | YashPal | Amritsar   | History    |
| 105  | Gaurav  | Chandigarh | Literature |
| 125  | Raman   | Shimla     | Computers  |
| 130  | Ram     | Jhansi     | Computers  |
+------+---------+------------+------------+
4 rows in set (0.00 sec)

위 결과에서 알 수 있듯이, 뷰 Info를 업데이트했을 때 기본 테이블인 student_info 역시 함께 업데이트되었습니다. 이는 뷰가 독립적인 데이터 저장소가 아니라 기본 테이블에 대한 또 다른 조회 창구이기 때문입니다.

5. 뷰를 기반으로 만든 뷰도 함께 갱신

흥미로운 점은 뷰 위에 또 다른 뷰를 만든 경우에도 마찬가지라는 것입니다. 아래의 info_less는 뷰 Info를 기반으로 생성된 뷰인데, Info가 업데이트되자 이 뷰 역시 자동으로 갱신된 결과를 보여줍니다.

mysql> Select * from info_less;
+------+-------+-----------+
| Id   | Name  | Subject   |
+------+-------+-----------+
| 125  | Raman | Computers |
| 130  | Ram   | Computers |
+------+-------+-----------+
2 rows in set (0.00 sec)

정리

MySQL에서 뷰의 값을 업데이트하면 다음과 같이 동작합니다.

  • 기본 테이블: 뷰를 통해 수정한 데이터가 원본 테이블에 그대로 반영됩니다.
  • 연관 뷰: 해당 테이블(또는 상위 뷰)을 기반으로 만들어진 다른 뷰들도 변경 사항을 즉시 반영하여 조회됩니다.

단, 모든 뷰가 업데이트 가능한 것은 아니라는 점에 유의해야 합니다. GROUP BY, DISTINCT, 집계 함수 등이 포함된 복잡한 뷰는 기본적으로 읽기 전용으로 동작할 수 있습니다.