전체 글 (143) 썸네일형 리스트형 SQL 서브쿼리를 이용한 DATA 수정 Update (update 절에 튜닝시 merge 만큼빠름) update 문에 서브쿼리를 쓸 수 있는 절 update 테이블명 set 변경할 컬럼과 값 where 조건 → 서브쿼리절은 , update, set, where 절 3개 모두 가능하다. 여러개의 데이터를 한번에 갱신할 수 있는 SQL / 많은 양의 데이터 갱신할때는 튜닝된SQL 을 작성해야된다. ******* 튜닝된 SQL 이란 merge 문 과 update 절의 subqery 문 이다. (1) where 절에 서브쿼리를 쓰는경우 예제: 스미스 보다 더많은 월급을 받는 사원들의 부서번호를 10번으로 수정 update emp set deptno = 10 where sal < (select sal from emp ename = 'SMITH'); 문제 :ALLEN 보다 늦게입사한 사원들 커미션을 9000으로 .. SQL 서브쿼리를 이용한 DATA 입력 Insert insert into 문에 value 가 아닌 select 절을 이용하여 한번에 데이터를 입력하는 방법이다. (1) emp_backup 이라는 테이블을 생성하고 그안에 데이터를 emp 테이블 데이터로 한번에 추가하고 싶을때 insert 문에 서브 쿼리문을 이용하여 한번에 입력 할 수 있다. 예제 : emp table 을 그대로 복제한 emp2 테이블 부서에 deptno 가 10 번인 사원들의 empno, ename, sal, deptno 를 한번에 갱신 해보자. insert into emp2 (empno, ename, sal, deptno) select ename, ename, sal, deptno from emp where deptno =10; -> 이런식으로 일반적으로 insert 문장을 쓸때 쓰던 .. SQL Select 절에 LOCK 을 거는 For Update LOCK 은 UPDATE 문을 수행할때 필요한 것. → 내가 변경하고자 하는 데이터를 다른 세션이 변경하지 못하도록 막을때 필요 SELECT 절에도 LOCK 을 걸 수 있다. → 마지막 절에 for update 라고 작성해 주면 select 절에 lock 이 걸린다. 왜 select 절에도 lock 이 필요할까? → 내가 만약 밤 12 시에 오늘의 총 매출 집계를 하고싶고 지금 select 하는 그 시점의 데이터로 집계하고 싶을때 누구도 내가 집계하려는 데이터를 변경하면 안된다. ~ 그래서 그 누구도 데이터를 갱신하지 못하게 할때 for update 를 사용한다. 예시 select ename, sal from emp where ename = 'KING' FOR UPDATE ; -> 마지막 문장에 for .. SQL 쿼리에 LOCK이 걸리는 경우 특정'행'을 갱신을 하는 update 문장이 있다면, 그 update 문장을 수행하는 session 은 update 하는 '행'에lock 을 건다. 그리고 그 lock은 commit 이나 rollback 을 할때까지 유지 됩니다. lock 을 거는 이유는? 내가 변경하고 있는 데이터를 다른사람이 변경하지 못하도록 하기 위해서. update 하는 '행' 전체에 lock 을 건다. → 만약 내가 king 의 월급을 변경했다면 다른 session 들은 king 의 월급 외에도 다른 어떤 컬럼의 데이터도 변경 할 수 없다. → king 말고 allen 의 데이터는 변경 가능하다 SQL [TCL] COMMIT / ROLLBACK COMMIT : 지금까지 작업한 DML 작업 (insert, update, delete, merge ) 를 데이터 베이스에 영구히 저장하겠다. rollback : 지금까지 작업한 DML 작업(insert, update, delete, merge) 를 모두 취소하겠다. insert.............어쩌고저쩌고 insert.................어쩌고저쩌고 입력한 작업물들 을 commit................ —————→ 여기까지는 모두 저장이 된것이고 insert................ update................. rollback ; ----------------> commit 다음 insert 문부터 전부다 rollback 이 된다. 문제 사원테이블의 월급을 모두 .. SQL 자동커밋 기능 활성화 시키기 자동커밋 상태 확인하기 SHOW AUTOCOMMIT ; 자동커밋기능 활성화 시키기 set autocommit on ; → autocommit IMMEDIATE 문장 나옴 자동커밋 기능을 활성화 시키면 DML 문장이 실행 될 때마다 자동 커밋 된다. 자동커밋기능 비활성화 시키기 set autocommit off ; SQL [DML문] MERGE 데이터 삽입,수정,삭제 한번에 1. 현업에서는 업데이트 문장을 빠르게 수행 하고싶을때, 튜닝의 용도로 많이 사용합니다. 2. INSERT, UPDATE, DELETE 를 한번에 수행하는 SQL 이고, 3. 주로 대용량 데이터를 한번에 UPDATE 하여 SQL 성능을 개선하기 위해서 사용됩니다. 예제 : emp 와dept 조인하여 사원이름, 부서위치 출력 select e.ename, d.loc from emp e, dept d where e.deptno = d.deptno; 예제 emp 와 dept 를 조인하지 않고 그냥 emp 테이블에서 부서위치에 대한 데이터도 보기위해 emp 테이블에 loc 컬럼을 추가 alter table emp add loc varchar2(10); 예제 : loc 에 각각 update 를 해야하는데 updat.. SQL [TCL] COMMIT 과 ROLLBACK 이 암시적으로 수행되는 경우 commit 1. 정상 종료 했을때다시 delete 후 rollback 하지 않고 exit 을 했을때 다시 들어가서 select 해보면 다 삭제 되어있다. —> 정상종료 되지 않으면 (exit ) 2. ddl 문을 실행 했을때 (create, alter, drop, truncate, rename) --> delete, update 문 실행후 그다음 ddl 문을 실행 하게 되면 앞의 delete, update 문은 암시적으로 commit 이 수행 되게 된다. 3. dcl 문을 실행했을때 ( grant , revoke ) rollback delete 했는데 갑자기 컴퓨터가 비정상적으로 종료되었을때 ex ) exit 없이 그냥 창을 닫거나, 컴퓨터가 그냥 꺼지거나 하는 모든 상황 이전 1 ··· 7 8 9 10 11 12 13 ··· 18 다음