본문 바로가기
DB & SQL/이것이 MySQL이다

by k-mozzi 2022. 5. 21.
반응형
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으로 설정하면 시간 제한을 없애는 것이다.

 

728x90
반응형

'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

댓글