결론부터 말씀드리면, MySQL에서는 뷰(View)와 테이블(Table)에 동일한 이름을 사용할 수 없습니다.
그 이유는 MySQL에서 뷰와 테이블이 동일한 네임스페이스(namespace)를 공유하기 때문입니다. 즉, 데이터베이스 내에서 모든 테이블과 뷰의 이름은 서로 구별 가능해야 하며, 중복될 수 없습니다.
1. 데모용 테이블 생성
먼저 실습을 위한 데모 테이블을 생성해 보겠습니다.
mysql> create table view_Table_Demo
-> (
-> Id int,
-> Name varchar(20)
-> );
Query OK, 0 rows affected (0.80 sec)
2. 테이블에 데이터 삽입
이제 INSERT 명령을 사용하여 테이블에 레코드를 추가합니다.
mysql> insert into view_Table_Demo values(100,'Larry');
Query OK, 1 row affected (0.17 sec)
mysql> insert into view_Table_Demo values(101,'Mike');
Query OK, 1 row affected (0.20 sec)
mysql> insert into view_Table_Demo values(102,'Sam');
Query OK, 1 row affected (0.14 sec)
3. 저장된 데이터 확인
SELECT 문을 사용하여 테이블의 모든 레코드를 조회해 보겠습니다.
mysql> select *from view_Table_Demo;
실행 결과는 다음과 같습니다.
+------+-------+
| Id | Name |
+------+-------+
| 100 | Larry |
| 101 | Mike |
| 102 | Sam |
+------+-------+
3 rows in set (0.00 sec)
4. 동일한 이름으로 뷰 생성 시 발생하는 오류
이미 존재하는 테이블과 같은 이름으로 뷰를 생성하려고 하면 다음과 같은 오류가 발생합니다.
mysql> create VIEW view_Table_Demo AS SELECT * from view_Table_Demo;
ERROR 1050 (42S01): Table 'view_Table_Demo' already exists
ERROR 1050은 해당 이름의 객체(테이블 또는 뷰)가 이미 존재한다는 의미입니다. 뷰는 생성되지 않으며, 쿼리는 실패하게 됩니다.
오류 해결 방법
위와 같은 오류를 피하려면 뷰와 테이블에 서로 다른 이름을 사용해야 합니다. 예를 들어 테이블 이름이 view_Table_Demo라면, 뷰에는 v_view_Table_Demo처럼 접두사를 붙여 구분하는 것이 좋습니다.
mysql> create VIEW v_view_Table_Demo AS SELECT * from view_Table_Demo;
Query OK, 0 rows affected (0.10 sec)
또한, 객체 생성 전에 아래 명령으로 기존 테이블과 뷰 목록을 미리 확인하면 중복 오류를 예방할 수 있습니다.
mysql> show tables;
정리
MySQL에서 뷰와 테이블은 같은 네임스페이스를 공유하므로 동일한 이름을 가질 수 없습니다. 동일한 이름으로 뷰를 생성하려고 하면 ERROR 1050 오류가 발생하며, 이를 방지하려면 서로 다른 이름을 사용하거나 SHOW TABLES; 명령으로 기존 객체를 먼저 확인하는 습관을 들이는 것이 좋습니다.