-
데이터 베이스 _뷰(VIEW) DML(INSERT, UPDATE, DELETE) 사용SQL/sql 문법(mysql, mariaDB) 2024. 5. 14. 10:39
▤ 목차
✔ 읽기 전용뷰
📝 읽기 전용 뷰 생성 : with read only
읽기 전용 뷰를 만들 수 있다.'with read only'를 sql 문장에 생성하면 된다.
읽기 전용 뷰에서는 각종 DML 작업(DELETE, INSERT, UPDATE,...) 이 제약이 걸린다.
💻 코드로 보기
create or replace view 뷰이름 as ( SELECT FROM 구문) with read only;
읽기 전용 모드인지 확인하기 하는 코드이다. 뷰 이름은 반드시 영문 대문자로 조회해야 한다.
select read_only from user_views where view_name='뷰이름';
✔ DML(INSERT, UPDATE, DELETE) 사용
단순 뷰인경우 INSERT, UPDATE, DELET가 자유롭다.
단 NOT NULL 조건이 걸린 칼럼이 있다면 에러가 뜬다. (FK 조건이 되어 있다면 삭제 불)
⌨ 단순 뷰
#v_e는 v_d로 만든 뷰테이블이다. CREATE VIEW v_d AS SELECT jikwon_no AS 번호,jikwon_name 이름,jikwon_pay * 10000 AS 연봉 FROM jikwon ORDER BY jikwon_pay DESC;
CREATE VIEW v_e AS SELECT * FROM v_d WHERE 연봉 >= 78000000;
연봉 테이블은 원래 물리적 칼럼이 아닌 뷰를 만들 때 연산작업으로 진행된 칼럼이다.
👏 UPDATE
UPDATE v_e SET 이름 = '홍길동' WHERE 이름 = '공기밥';
뷰 테이블의 이름이 '공깃밥'인 사람을 '홍길동'으로 바꿨다. 결과를 확인해 보자.
SELECT * FROM v_e;
예상과 같이 v_e 테이블은 해당 칼럼이 달라졌다. 주의할 점은 앞으로 나온다.
분명 v_e테이블을 변경했다. 원본 DB를 확인해 보자.
SELECT * FROM jikwon;
원본 DB인 jikwon 테이블의 데이터도 변경되었다.
UPDATE v_e SET 연봉=0 WHERE 번호=1;
그럼 연봉 칼럼은 변경이 가능한가?
불가능하다 물리적인 칼럼이 아닌 칼럼은 변경이 불가능하다. 연봉은 연산에 의해 만들어진 가상의 칼럼이다.
update는 물리적 칼럼을 수정한다.
👏 DELETE
DELETE FROM v_e WHERE 번호=18;
해당 값이 사라졌다. 번호가 18번인 값이 삭제되었다. 원본 테이블을 확인해 보자.
뷰의 칼럼을 삭제하면 원본 테이블 칼럼이 삭제된다.
👏 INSERT
CREATE VIEW v_f AS SELECT jikwon_no, buser_num, jikwon_jik FROM jikwon WHERE jikwon_jik='사원';
새로운 v_f 뷰테이블을 만들자.
INSERT INTO v_f VALUES(35,40,'대리');
위의 쿼리는 원본 테이블에 insert 되는 것이다. 하지만 에러 메시지가 나온다.
왜냐하면 직원 이름의 조건 not null이기 때문이다.
insert에 오류가 나면 원본 테이블이 not null이기 때문이라고 유추해 볼 수 있다.
새로운 테이블을 사용해 보자.
CREATE VIEW v_g AS SELECT jikwon_no,jikwon_name,buser_num ,jikwon_jik FROM jikwon WHERE jikwon_jik='사원';
INSERT INTO v_g VALUES(35,'이진수',40,'사원');
해당 값이 들어갔다.
👏 GROUP BY
CREATE VIEW v_h AS SELECT jikwon_jik, SUM(jikwon_pay) AS payhap FROM jikwon GROUP BY jikwon_jik;
UPDATE v_h SET jikwon_jik='차장' WHERE jikwon_jik='과장';
group by 연산에 의해 만들어진다.
때문에 group by는 insert, delete, update는 안된다.
read only, 참조만 가능하다.
💻 복합 뷰
복합 뷰는 조인, 함수, UNION 등 사용하여 뷰를 생성하는 것을 말한다.
이 경우 함수를 사용 시 반드시 칼럼에 별명을 꼭 부여해야 한다.
복합 뷰는 SELECT는 가능하지만 INSERT, UPDATE, DELETE는 상황에 따라서 가능하지 않을 수도 있다.
✔조인테이블 + 뷰
조인된 테이블을 마치 하나의 테이블처럼 뷰로 만들어 사용한다.
💻 코드로 보기
CREATE OR REPLACE VIEW v_join AS SELECT jikwon_no, jikwon_name, buser_name, jikwon_jik FROM jikwon INNER JOIN buser ON buser_num=buser_no WHERE buser_num IN(10,30); SELECT * FROM v_join;
😊정리
부서명을 알기 위해 사원 테이블과 부서 테이블을 자주 join 한다면 복합뷰를 만들어 해결할 수 있다.
'SQL > sql 문법(mysql, mariaDB)' 카테고리의 다른 글
트랜잭션(transection): deadlock (2) 2024.05.16 트렌젝션(transections)과 ACID (0) 2024.05.15 데이터 베이스 _ 뷰(view) (0) 2024.05.13 서브쿼리 (subquery): WHERE, FROM, SELECT 위치한 서브쿼리 (0) 2024.05.10 다중 행 서브쿼리 : ANY, ALL, EXISTS (+ subquery와 join) (0) 2024.05.09