[Oracle] 오라클 #13, update, delete문과 rollback

update문


- DML(insert,delete,update)

- 데이터를 수정하는 명령어

- update 테이블명 set 컬럼명 = 수정할값[, 컬럼명 = 수정할 값]xN [where 절]

- 테이블의 모든행에 대한 수정.

- where 절 : 수정하고 싶은 레코드 지정




예제로 살펴보기


update tblname set gender='f'; --> 이건 전체 레코드의 gender 값을 'f'로 바꾸는것.

update tblname set gender='f' where last='유'and first='재석';


승진한 임직원의 직위 변경하기

- 홍길동 부장 -> 이사로 진급 -> 직급을 이사로 수정해야한다.

- ****** : 수정할 대상이 1개행(유일한 행) -> 그 행을 반드시 다른행과 구분해야한다. 식별가능해야한다.  -> PK 컬럼 -> PK 컬럼을 조건으로

=> update tblinsa set jikwi = '이사'  where num=1001; (홍길동 부장의 PK 번호)

where name ='홍길동' ; => name값으로 홍길동을 찾는 경우에는 PK가 아니기 때문에 중복값들이 모두 변경될 수 있다. 즉, 동명이인의 홍길동 사원이 순식간에 이사로 승진되는 결과를 초래할 수 있으므로 반드시 레코드(한사람 한사람)를 구분지을 수 있는 PK컬럼으로 where절에서 수정할 레코드를 찾아야 한다.

    


다중행(그룹) 업데이트 : 모든 기획부 직원의 급여 10% 인상.

update tblinsa set basicpay=basicpay * (1.1) where buseo = '기획부';  

=> 기획부인 모든 직원의 basicpay(기본급)이 1.1배 증가.


홍길동의 주소 : 서울 -> 부산

update tblinsa set city = '부산' where num=1001; 

=> 홍길동(1001)의  address 컬럼이 '서울'이었는데 부산으로 변경

    

해당 데이터 기한없는 유일한 식별자 : PK 

update tblinsa set num=1100 where num=1001; --금지 금지 금지 금지 금지

**수정할 땐 테이블의 컬럼 제약사항에 어긋나지 않는 값으로만 수정 가능하다. => 즉 1001이라는 PK값을 1100으로 바꾸었을 때, PK에는 자동적으로 중복값을 허용하지 않겠다는 제약조건이 있다. 그런데 1001을 1100으로 바꾼다면 PK컬럼에 1100이라는 값이 존재할 수 도 있는 경우를 생각해보아야 하므로 PK컬럼을 수정하는 것은 별로 좋은 상황은 아니다.



delete 문


- DML(insert, update, delete)

- (행)데이터를 삭제하는 명령어

- 일부 컬럼만을 삭제 불가능 -> update

- delete [from] 테이블명 [where절] 



예제로 살펴보기


컬럼city 값이 '서울'인 데이터 삭제 

delete from tblinsa where city='서울';


컬럼city 값이 '경기'가 아닌 데이터 삭제

delete from tblinsa where city<>'경기';


PK값이 1002번인 데이터를 삭제

delete from tblinsa where num=1002;


난 레코드 전체말고 컬럼을 삭제하고 싶은데...? 그렇게는 못지우나요,,?

>> 네 못지웁니다. delete를 컬럼단위로 수행하는 것은 제공되지 않습니다 하지만 해당 컬럼을 null로 update(수정)하는 방법만이 있습니다.



데이터를 잘못지웠어요. / 잘못수정했어요. / 이상한 값을 삽입했어요  어떻게해요...?


데이터를 insert 하거나 delete 혹은 update 했을 때, 이를 되돌릴 수 있는 방법이 있는데요. 

rollback;  를 치면 됩니다.


rollback과 짝꿍으로 commit이라는 키워드도 있는데 간단히 얘기하자면 데이터를 삽입,삭제,수정하는 행위는 트랜잭션이라는 블록같은 개념으로 관리가 됩니다. 그래서 commit을 하는 경우가 블록의 시작, rollback을 하는 순간 마지막으로 commit을 날린 다음으로 데이터가 롤백됩니다.


이와 관련된 부분은 트랜잭션 파트에서 더 자세히 설명하겠습니다.






댓글

Designed by JB FACTORY