Preface
이번 장에선 뷰의 사용 방법을 공부했다.
지난 책에서부터 이미 여러 번 접했던 내용이고, 테이블과 사용 방법도 동일해서 딱히 어려운 부분은 없었다.
MySQL의 기본적인 사용 방법은 대부분 숙지했다고 생각했지만, 책에 나온 실습을 그대로 따라하는 것이 아닌, 내가 원하는 데이터를 수정할 땐 종종 문법이 기억나지 않아 앞 부분을 찾아봐야 하는 경우가 있다.
아무래도 진도를 더 나가기 전에 틈틈이 복습을 해야할 것 같다.
1. 뷰
- 뷰(view): 하나 이상의 테이블에서 원하는 모든 데이터를 선택하여, 그들을 사용자 정의하여 나타낸 것
1) 뷰를 새로운 테이블로 생각하고 접근하면 된다.
2) primary key 등의 정보는 확인되지 않는다.
- 뷰를 생성하는 방법
use tabledb;
create view v_usertbl
as
select userid, username, addr from usertbl;
- 뷰는 기본적으로 읽기 전용으로 많이 사용되지만, 뷰를 통해 데이터를 수정할 수도 있다.
- 뷰의 장점
1) 보안에 도움이 된다.
2) 복잡한 쿼리를 단순화 시켜줄 수 있다.
- 뷰 사용의 예시
use sqldb;
create view v_userbuytbl
as
select U.userid as 'USER ID', U.username as 'USER NAME', B.prodName as 'PRODUCT NAME',
U.addr, concat(U.mobile1, U.mobile2) as 'MOBILE PHONE'
from usertbl U
inner join buytbl B
on U.userID = B.userID;
select `USER ID`, `USER NAME` from v_userbuytbl;
- 뷰의 수정
alter view v_userbuytbl
as
select U.userid as '사용자 아이디', U.username as '이름', B.prodName as '제품 이름',
U.addr, concat(U.mobile1, U.mobile2) as '전화 번호'
from usertbl U
inner join buytbl B
on U.userid = B.userid;
select distinct `이름`, `전화 번호` from v_userbuytbl;
- create view는 기존에 뷰가 있으면 오류가 발생하지만, create or replace view는 기존에 뷰가 있어도 덮어쓰는 효과를 내므로 오류가 발생하지 않는다.
use sqldb;
create or replace view v_userbuytbl
as
select userid, username, addr from usertbl;
- 뷰의 삭제는 drop view를 사용하면 된다.
drop view v_userbuytbl;
- information_schema: 테이블에서 전체 시스템에 저장된 다양한 정보를 갖고 있다.
select * from information_schema.views
where table_schema = 'sqldb' and table_name = 'v_sum';
-- 뷰의 정보 확인
- 뷰를 통해 데이터의 수정이나 삭제를 수행할 수 없는 경우
1) 집계 함수를 사용한 뷰
2) UNION ALL, JOIN 등을 사용한 뷰
3) DISTINCT, GROUP BY 등을 사용한 뷰
- with check option: 뷰에서 설정한 조건에 해당하는 데이터만 입력되도록 하는 제약
create view v_height177
as
select * from usertbl where height >= 177;
select * from v_height177;
-- 177 이하의 데이터를 insert하면 view에는 보이지 않지만 usertbl에 입력됨
alter view v_height177
as
select * from usertbl where height >= 177
with check option;
- 참조되는 테이블이 삭제되면 뷰를 통해 테이블을 조회할 수 없다.
2. 테이블스페이스
- 테이블스페이스: 테이블이 실제로 저장되는 물리적인 공간
→ 기본 설정은 모든 테이블이 시스템 테이블스페이스에 저장된다.
- 시스템 테이블스페이스에 대한 정보 확인 방법
show variables like 'innodb_data_file_path';
- 대용량 테이블을 동시에 여러 개 사용할 땐 각각의 테이블을 별도의 테이블스페이스에 저장하는 것이 좋다.
- 각 테이블이 별도의 테이블스페이스에 저장되는지 확인하는 방법
show variables like 'innodb_file_per_table';
-- 기본적으로 on으로 설정되어 있다.
- 테이블스페이스 생성 방법
create tablespace ts_a add datafile 'ts_a.ibd'
create tablespace ts_b add datafile 'ts_b.ibd'
create tablespace ts_c add datafile 'ts_c.ibd'
-- 테이블스페이스의 확장명은 꼭 'ibd'이어야 한다.
- 테이블스페이스에 파일 생성하는 방법
create table table_a (id int) tablespace ts_a;
create table table_b (id int);
alter table table_b tablespace ts_b;
- 쿼리의 응답 시간 설정 방법
1) Workbench 메뉴의 edit에서 preferences를 선택한 후, SQL editor 선택
2) MySQL session 부분의 'DBMS connection read timeout interval'과 'DBMS connection timeout interval' 두 가지를 설정
→ 0으로 설정하면 시간 제한을 없애는 것이다.
'DB & SQL > 이것이 MySQL이다' 카테고리의 다른 글
인덱스 (2) (0) | 2022.05.29 |
---|---|
인덱스 (1) (0) | 2022.05.24 |
테이블 (0) | 2022.05.20 |
SQL 프로그래밍 (0) | 2022.05.17 |
SQL 고급 (2) (0) | 2022.05.15 |
댓글