VIEW를 만드는 형식은
CREATE VIEW 뷰_이름 이다.
CREATE VIEW 뷰_이름
AS
SELECT 문;
접근은?
SELECT 열_이름 FROM 뷰_이름
[WHERE 조건];
뷰의 작동
뷰를 쓰면 보안에 도움이 됨
사용자 아이디 이름 주소만 넣고 중요한 개인정보는 넣지 않을 수 있다.
USE market_db;
CREATE VIEW v_member
AS
SELECT mem_id, mem_name, addr FROM member;
SELECT * FROM v_member;
-- 뷰에 WHERE문 넣어서 접근
USE market_db;
CREATE VIEW v_member
AS
SELECT mem_id, mem_name, addr FROM member;
SELECT * FROM v_member;
쿼리를 단순하게 만들 수 있다.
CREATE VIEW v_memberbuy
AS
SELECT B.mem_id, M.mem_name, B.prod_name, M.addr,
CONCAT(M.phone1, M.phone2) '연락처'
FROM buy B
INNER JOIN member M
ON B.mem_id = M.mem_id;
SELECT * FROM v_memberbuy WHERE mem_name = '블랙핑크';
띄어쓰기가 있을 때 백틱을 사용
USE market_db;
CREATE VIEW v_viewtest1
AS
SELECT B.mem_id 'Member ID', M.mem_name AS 'Member Name',
B.prod_name "Product Name",
CONCAT(M.phone1, M.phone2) AS "Office Phone"
FROM buy B
INNER JOIN member M
ON B.mem_id = M.mem_id;
SELECT DISTINCT `Member ID`, `Member Name` FROM v_viewtest1; -- 백틱을 사용
뷰를 수정하고 싶을 때는 ALTER을 이용
ALTER VIEW v_viewtest1
AS
SELECT B.mem_id '회원 아이디'. M.mem_name AS '회원 이름',
B.prod_name "제품 이름",
CONCAT(M.phone1, M.phone2) AS "연락처"
FROM buy B
INNER JOIN member M
ON B.mem_id = M.mem_id;
SELECT DISTINCT `회원 아이디`, `회원 이름` FRIN v_viewtest1; -- 백틱을 사용
뷰 삭제
DROP VIEW v_viewtest1;
뷰를 다시한번 만들고 DESCRIBE로 뷰의 정보 확인
USE market_db;
CREATE OR REPLACE VIEW v_viewtest2
AS
SELECT mem_id, mem_name, addr FROM member;
DESCRIBE v_viewtest2; -- PK값은 확인을 못한다.
-- 뷰를 만들었던 쿼리문 확인
SHOW CREATE VIEW v_viewtest2;
뷰 업데이트도 한번 해본다.
UPDATE v_member SET addr = '부산' WHERE mem_id='BLK' ;
SELECT * FROM v_member;
아래를 실행하면 입력이 될 수도 있고 안될수도 있는데(여기서는 안된다.)
뷰에 입력되는 것이 아니고 테이블에 입력되기 때문인데 (권장사항은 아니다.)
INSERT INTO v_member(mem_id, mem_name, addr) VALUES('BTS','방탄소년단','경기') ;
아래구문을 넣으면 not null이 있게되고(이름 넣고 인원도 넣어야 한다.) number을 넣을 방법이 없는데
view에 INSERT하는 부분은 id, name, addr 3가지 밖에 없기 때문이다.(인원은 not null이기 때문에 반드시 넣어야 한다.)
아무튼 INSERT를 통해서 VIEW를 다루는 것은 바람직하지 않다.
-- 하게되면
DESCRIBE member;
<출처 한빛미디어: SQL 테이블 제약조건 기본키, 외래키, 고유키>
https://www.youtube.com/watch?v=JrXWxku7ZIM&list=PLVsNizTWUw7GCfy5RH27cQL5MeKYnl8Pm&index=15
'SQL(MySQL)' 카테고리의 다른 글
인덱스의 내부 작동 원리와 구조 & 데이터 검색하기 (0) | 2022.04.12 |
---|---|
인덱스 개념과 장단점, 클러스터형 인덱스와 보조 인덱스 (0) | 2022.04.12 |
테이블 제약조건(기본키, 외래키, 고유키) (0) | 2022.04.11 |
IF문, CASE문, WHILE문, 동적SQL / GUI 환경에서 테이블 & SQL로 테이블 만들기 (0) | 2022.04.11 |
SQL - JOIN (0) | 2022.04.10 |