1cm

자바 프로그래밍_Day_38_DML(DELETE), TCL, VIEW 본문

국비지원_Java/Java Programming_1

자바 프로그래밍_Day_38_DML(DELETE), TCL, VIEW

dev_1cm 2021. 10. 19. 17:00
반응형

 

2021. 10. 12

 

 

       -> 단일행 서브쿼리를 각각의 컬럼에 적용한 값 조회

 

 

       -> 다중열 서브 쿼리를 통해 여러 컬럼을 한 번에 변경

 

 

 

       -> 1. 아시아 지역에서 근무하는 직원들 조회까지 했고, ASIA 오타로 실행이 안되는 줄 알아서 오타 수정도 했는데도 오류가 났다.

 

       -> 강사님은 WHERE 조건절을 괄호 안에 넣어줌으로써 조회가 가능했다.

       -> 나는 SET절을 괄호안에 넣어줘서 오류가 난 것 같다.

 

 

 

     > MERGE

       -> 구조가 같은 두 개의 테이블을 하나의 테이블로 합치는 기능 제공

       -> MATCHED THEN : 두 테이블에서 지정하는 조건의 값이 동일한 애들이 존재하면 UPDATE(덮어씌워짐)된다.

       -> NOT MATCHED THEN : 일치하는 조건의 값이 없으면 INSERT함(생성)

       -> * MERGE는 실무에서 잘 쓰이지 않는다고 하셔서 실습을 따로 진행하진 않았다.

 

     > DELETE

       -> 테이블의 행을 삭제하는 구문으로 테이블의 행 개수가 줄어듦

       -> WHERE조건을 설정하지 않고 테이블만 지정할 경우 모든 행이 삭제된다.

       -> FOREIGN KEY 제약조건이 설정되어 있는 경우 참조되고 있는 값에 대해서는 삭제가 불가능하다.

       -> 삭제 시 FOREIGN KEY 제약조건으로 컬럼 삭제가 불가능한 경우 제약조건을 비활성화 할 수 있다.

       -> 비활성화 된 제약 조건을 다시 활성화 시킬 수도 있다.

       -> COMMIT, ROLLBACK으로 복구가 가능하다.

 

 

 

       -> DELETE : 테이블에 기록된 데이터를 행 단위로 삭제하는 구문이다. (WHERE 제시하지 않을 시 전체 행이 삭제 된다.)

 

 

       -> COMMIT을 하고, 삭제하고자 하는 데이터를 DELETE 구문을 통해 지워준 뒤 ROLLBACK을 해주면 마지막 커밋 시점으로 ROLLBACK된다.

 

 

       -> 참조 관계에 있는 행은 삭제가 불가능하다. (자식테이블에서 사용중이기 때문)

 

       -> 참조 관계가 없는 행은 삭제가 가능하다.

 

 

 

     > TRUNCATE

       -> 테이블의 전체 행 삭제 시 사용하며 DELETE보다 수행 속도가 빠르고 ROLLBACK을 통해 복구가 불가능하다.

       -> 또한 DELETE와 마찬가지로 FOREIGN KEY 제약조건일 때는 적용 불가능하기 때문에 제약 조건을 비활성화 해야 삭제할 수 있다.

 

       -> DELETE 구문보다 수행 속도가 더 빠르고, 테이블의 전체 행을 삭제할 때 사용한다.

       -> 제약조건 X, ROLLBACK 불가능

 

 

     > TCL(Transaction Control Language)

       -> 트랜잭션을 제어하는 언어로, 하나의 논리적인 큰 작업 단위를 트랜잭션이라고 한다.

       -> 여러 개의 업무들을 묶어서 하나의 작업단위로 만드는 것이다.

       -> 데이터의 변경 사항(DML)들을 묶어서 하나의 트랜잭션에 담아서 처리한다.(COMMIT 하기 전 까지의 변경사항들을 하나의 트랜잭션에 담게 된다.)

       -> COMMIT (트랜잭션 종료 처리 후 저장)

          -> 메모리 버퍼에 임시 저장된 데이터를 DB에 반영하고, 모든 작업들을 정상적으로 처리하겠다고 확정하는 구문, 하나의 트랜잭션 과정을 종료하게 된다.

       -> ROLLBACK (트랜잭션 취소)

          -> 메모리 버퍼에 임시 저장된 데이터를 삭제한 후, 마지막 COMMIT 시점으로 돌아가며, 모든 작업들을 취소 처리 하겠다고 확정하는 구문, 하나의 트랜잭션 과정을 취소하게 된다.

       -> SAVEPOINT (임시저장)

          -> 저장점을 지정해 두면 ROLLBACK을 진행할 때, 전체 작업을 ROLLBACK하는 것이 아닌 SAVEPOINT까지의 일부까지만 ROLLBACK 시킬 수 있다.

 

 

       -> 새로운 테이블 생성

 

       -> 두 개의 행이 삭제된 시점에 SAVEPOINT 지점을 지정해줬고, 그 다음 작업을 한 후 ROLLBACK TO SAVEPOINT 지점을 실행시켜주면 SAVEPOINT 지정점 (두 개의 행이 삭제된 시점) 으로 되돌아가게 된다. -> EMP_ID : 200 복구됨

 

       -> 테이블을 생성하면 자동으로 COMMIT이 되므로 ROLLBACK을 해주게 되면 그 시점으로 되돌아가게 된다.

 

       -> DDL구문(데이터 구조 변경 : 생성, 수정, 삭제)을 실행하는 순간 기존 메모리 버퍼에 임시 저장된 변경사항들이 무조건 DB에 반영된다. (COMMIT 되어버림)

 

 

     > VIEW

       -> SELECT 쿼리의 실행 결과를 화면에 저장한 논리적 가상 테이블

       -> 실제 테이블과는 다르게 실질적 데이터를 저장하고 있진 않지만 사용자는 테이블을 사용하는 것과 동일하게 사용 가능하다.

       -> 서브쿼리의 SELECT절에 함수가 사용된 경우 반드시 별칭을 지정해줘야 한다.

       -> 생성된 뷰를 가지고 DML구문(INSERT, UPDATE, DELETE) 사용이 가능하다.

       -> 생성된 뷰에 요청한 DML구문이 베이스 테이블도 변경한다.

       -> SQL 쿼리문이 저장되어 있다고 생각하면 되고(가상 테이블), JOIN없이 사용이 가능하며, 호출하게 되면 SQL문 실행 후 실제 테이블 처럼 사용할 수 있다.

 

       -> 조건절만 다르고 JOIN절, 나머지 쿼리들은 같으니 이런 경우엔 VIEW를 통해 간략하게 데이터를 조회할 수 있다.

 

       -> 시스템 계정에서 KH계정으로 VIEW 생성할 수 있는 권한을 부여해준다음 진행

 

       -> VIEW 생성 구문

 

 

       -> VIEW 테이블은 가상 테이블이기 때문에 실제 데이터가 담겨있는 것은 아니다.

 

 

       -> VIEW 테이블을 생성해주고 나서 데이터 조회를 훨씬 간략하게 할 수 있음을 확인할 수 있다.

 

 

       -> SELECT * FROM USER_TABLES ; -> 해당 유저가 가지고 있는 테이블 정보를 가지고 있는 데이터 딕셔너리

 

 

       -> SELECT * FROM USER_VIEWS; -> 해당 계정이 가지고 있는 VIEW들에 대한 내용을 조회하는 데이터 딕셔너리(서브쿼리 확인가능)

 

       -> 서브 쿼리의 SELECT 절에 함수나 산술연산이 기술되어 있는 경우 반드시 별칭을 지정해줘야 한다.

       -> OR REPLACE 생략 시 기존의 동일한 뷰를 생성하는 것이기 때문에 이미 있다는 오류가 뜨게 될 것이다.

 

 

       -> 조회되는 컬럼의 개수와 별칭의 개수가 같아야 한다.(조회되는 모든 컬럼에 별칭 부여해줘야 함)

 

 

       -> VIEW삭제는 테이블 삭제와 동일한 방법으로 삭제

 

 

       -> VIEW를 이용해서 DML(INSERT, UPDATE, DELETE) 사용 시(데이터 변경), 실제 데이터가 담겨 있는 기본 테이블에도 적용된다.

 

       -> 뷰 테이블과 기존 테이블의 데이터가 변경되는 것을 확인할 수 있다.

 

 

       -> DML(DELETE) 사용 시, 기존 테이블에 있는 데이터도 함께 삭제되는 것을 확인할 수 있다.

반응형
Comments