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)
출처 :
728x90
반응형
'study > DB' 카테고리의 다른 글
[MYSQL] 문자열을 구분자로 분리 후 일치하는지 구분하는 방법 (0) | 2023.11.29 |
---|---|
mysql 삭제쿼리 실행시 오류 발생 대처 (0) | 2015.11.28 |
오라클 버전으로 WITHIN GROUP 대신 XMLAGG 사용하게 된 케이스 (0) | 2015.06.24 |
oracle update with select 2가지 방법 (0) | 2015.04.24 |
mywql - error - The last packet successfully received from the server was ... (0) | 2014.12.05 |