본문 바로가기
study/DB

mysql view

by 휘루걸음 2013. 4. 9.
728x90
반응형

MYSQL VIEW란

MySQL에서 VIEW는 하나 이상의 기본 테이블을 기반으로 하며, 저장하지 않고도 가상의 테이블로 쿼리 결과를 나타냅니다. VIEW를 사용하면 복잡한 쿼리를 간단하게 만들 수 있고, 데이터에 대한 뷰를 정의하여 효율적으로 데이터에 접근할 수 있습니다.

아래는 MySQL에서 VIEW를 생성하고 사용하는 기본적인 예제입니다.

반응형
728x90

1. VIEW 생성

CREATE VIEW view_name AS SELECT column1, column2, ... FROM table_name WHERE condition;

 

예를 들어, "employees" 테이블에서 "name"과 "salary" 컬럼만을 사용하여 VIEW를 생성하는 경우:

CREATE VIEW employee_view AS SELECT name, salary FROM employees WHERE department = 'IT';

 

2. VIEW 사용

SELECT * FROM view_name;

 

위의 예제에서는 다음과 같이 사용할 수 있습니다:

SELECT * FROM employee_view;
 

3. VIEW 업데이트

VIEW는 기본 테이블의 변경을 자동으로 반영합니다. 따라서 VIEW를 쿼리할 때 항상 최신 데이터를 얻을 수 있습니다.

 

4. VIEW 삭제

DROP VIEW IF EXISTS view_name;

 

예를 들어, 위의 예제에서 "employee_view" VIEW를 삭제하는 경우:

DROP VIEW IF EXISTS employee_view;

 

VIEW는 쿼리 결과를 저장하지 않고, 실시간으로 기본 테이블의 데이터를 조회하는 가상의 테이블이므로, 성능상의 이점이 있습니다. 또한, 데이터에 대한 특정한 시각을 정의하여 필요한 데이터만을 조회하는데 사용할 수 있습니다.

 

 

mysql 외부 IP 설정 시 CREATE VIEW, SHOW VIEW 권한이 부여됨. 
mysql> show grants for testid@175.118.124.221; 
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 
| Grants for testid@175.118.124.221                                                                                                                                                          | 
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 
| GRANT USAGE ON *.* TO 'testid'@'175.118.124.221' IDENTIFIED BY PASSWORD '*4E0AE8EAAE183E4454B803A602F1EF1E8F5DE9CA'                                                                        | 
| GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, REFERENCES, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES, CREATE VIEW, SHOW VIEW ON `testid`.* TO 'testid'@'175.118.124.221' | 
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 
2 rows in set (0.00 sec) 

localhost 및 다른 외부 IP설정에서 생성된 view 테이블은 외부 IP(175.118.124.221)에서는 접근 및 삭제는 가능하오나 alter view 문을 사용할 수 없음. 
alter view 사용시 Access denied; you need the SUPER privilege for this operation 에러 발생. 

1. localhost 에서 view 생성 
mysql> create view view_table_name as select * from aa; 
Query OK, 0 rows affected (0.00 sec) 

2. view 테이블 확인 
mysql> show create table view_table_name; 
+-----------------+-----------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+ 
| View            | Create View                                                                                                                                  | character_set_client | collation_connection | 
+-----------------+-----------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+ 
| view_table_name | CREATE ALGORITHM=UNDEFINED DEFINER=`testid`@`localhost` SQL SECURITY DEFINER VIEW `view_table_name` AS select `aa`.`t1` AS `t1` from `aa` | binary              | binary              | 
+-----------------+-----------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+ 
1 row in set (0.00 sec) 

3. 175.118.124.221 에서 view table 접근 확인 

mysql> check table view_table_name; 
+----------------------------+-------+----------+----------+ 
| Table                      | Op    | Msg_type | Msg_text | 
+----------------------------+-------+----------+----------+ 
| testid.view_table_name | check | status  | OK      | 
+----------------------------+-------+----------+----------+ 
1 row in set (0.00 sec) 

4. 175.118.124.221 에서 view 테이블 수정 시 에러 발생. 
mysql> ALTER ALGORITHM=UNDEFINED DEFINER=`testid`@`localhost` SQL SECURITY DEFINER VIEW `view_table_name` AS select `aa`.`t1` AS `t1` from `aa`; 
ERROR 1227 (42000): Access denied; you need the SUPER privilege for this operation 

5. view 테이블 수정은 definer 로 지정된 곳에서 작업가능. 또는 view 테이블 drop 후 재생성 

6. localhost 에서 alter view 가능 
mysql> ALTER ALGORITHM=UNDEFINED DEFINER=`testid`@`localhost` SQL SECURITY DEFINER VIEW `view_table_name` AS select `aa`.`t1` AS `t1` from `aa`; 

Query OK, 0 rows affected (0.01 sec) 

 

출처 : 

http://blog.boyo.kr/entry/mysql-view-권한-및-alter-view-정리

 

728x90
반응형