들어가기에 앞서
본 게시물은 '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)
뷰를 삭제하는 코드입니다.
댓글