본문 바로가기
Database/MySQL

[MySQL] 뷰를 생성, 조회, 삭제하는 명령어 및 예제 정리 - CREATE VIEW, SHOW CREATE VIEW, DROP VIEW

by Blue Developer 2021. 9. 26.

들어가기에 앞서

본 게시물은 'MySQL 8.0' 버전을 이용한 '명령 프롬프트(cmd)' 환경에서 작성한 코드를 토대로 만들어졌습니다.

뷰는 데이터베이스(스키마)와 마찬가지로 변경이 불가능하므로 생성, 조회, 삭제하는 명령어만 알아놓도록 합니다.

CREATE VIEW - 뷰 생성 및 정의

mysql> DESC student;
+-----------+-------------+------+-----+---------+-------+
| Field     | Type        | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| stdnum    | varchar(10) | NO   | PRI | NULL    |       |
| stdname   | varchar(20) | NO   |     | NULL    |       |
| major     | varchar(20) | YES  | MUL | NULL    |       |
| sex       | char(1)     | YES  |     | M       |       |
| birthdate | date        | YES  |     | NULL    |       |
+-----------+-------------+------+-----+---------+-------+
5 rows in set (0.00 sec)

mysql> SELECT * FROM student;
+-----------+---------+-------------+------+------------+
| stdnum    | stdname | major       | sex  | birthdate  |
+-----------+---------+-------------+------+------------+
| 100000000 | Hong    | biology     | F    | 1990-02-24 |
| 100000001 | Song    | physics     | M    | 1996-02-24 |
| 100000002 | Dong    | economics   | M    | 1995-02-24 |
| 100000003 | Mong    | engineering | F    | 1993-02-24 |
+-----------+---------+-------------+------+------------+
4 rows in set (0.00 sec)

'DESC'는 테이블의 전체적인 구조(스키마)를 출력해주는 역할을 수행합니다.

'SELECT * FROM student' student 테이블의 모든 속성에 대해서 튜플들을 출력해줍니다.

 

mysql> CREATE VIEW stdinfo AS
	SELECT stdname, sex, birthdate # stdname 속성, sex 속성, birthdate 속성을 가져온다.
    FROM student # student 테이블로부터
    WHERE sex='F' # sex 속성이 'F'인 튜플들에 대해서
;
Query OK, 0 rows affected (0.01 sec)

뷰는 기존에 존재하는 테이블의 일부 속성을 가져와서 만드는 가상의 테이블입니다.

따라서 테이블에서 사용 가능한 'DESC', 'SELECT' 등의 명령어를 모두 동일하게 사용할 수 있습니다.

위의 코드는 student 테이블로부터 stdname, sex, birthdate 속성을 가져와서 뷰를 생성하는 코드입니다.

 

mysql> DESC stdinfo;
+-----------+-------------+------+-----+---------+-------+
| Field     | Type        | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| stdname   | varchar(20) | NO   |     | NULL    |       |
| sex       | char(1)     | YES  |     | M       |       |
| birthdate | date        | YES  |     | NULL    |       |
+-----------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

mysql> SELECT * FROM stdinfo;
+---------+------+------------+
| stdname | sex  | birthdate  |
+---------+------+------------+
| Hong    | F    | 1990-02-24 |
| Mong    | F    | 1993-02-24 |
+---------+------+------------+
2 rows in set (0.00 sec)

이전에 테이블에서 사용한 'DESC'와 'SELECT' 명령어가 뷰에서 모두 동일하게 적용되는 것을 볼 수 있습니다.

이외에 'DROP' 명령어를 사용하여 뷰를 삭제할 수도 있지만 'ALTER'를 사용하여 뷰의 정의를 변경하는 것은 불가능합니다.

SHOW CREATE VIEW - 생성된 뷰를 조회

mysql> SHOW CREATE VIEW stdinfo;
+---------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+
| View    | Create View                                                                                                                                                                                                                                     | character_set_client | collation_connection |
+---------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+
| stdinfo | CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `stdinfo` AS select `student`.`stdname` AS `stdname`,`student`.`sex` AS `sex`,`student`.`birthdate` AS `birthdate` from `student` where (`student`.`sex` = 'F') | euckr                | euckr_korean_ci      |
+---------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+
1 row in set (0.00 sec)

생성된 뷰를 조회하는 코드입니다.

DROP VIEW - 뷰 삭제

mysql> DROP VIEW stdinfo;
Query OK, 0 rows affected (0.01 sec)

뷰를 삭제하는 코드입니다.

댓글