Study/DB

[SQL 첫걸음] 4장.데이터의 추가,삭제,갱신- 18.데이터 갱신하기(UPDATE)

momo02 2018. 8. 30. 09:26
반응형

저자 : 아사이 아츠시

출판 : 한빛미디어 



1. UPDATE로 데이터 갱신하기 
- UPDATE 테이블명 SET 열명 = 값 WHERE 조건식
ex ) UPDATE sample41 SET b='2018-09-07' WHERE no = 2; 



2. UPDATE로 갱신할 경우 주의사항




- UPDATE sample41 SET no = no + 1;  실행 결과 모든 행의 no값에 1씩 더해짐. 
위처럼 갱신할 열이 포함된 식으로도 표기 가능.  해당 열이 갱신 대상이 되는 열이라 해도 상관없음.
계산식은  '현재의 no값에 1을 더한값으로 no열을 갱신하라'는 의미. 
갱신은 행 단위로 처리되므로 '현재의 no값'은 그 행이 갱신되기 전의 값에 해당. 




3.복수열 갱신

- UPDATE 테이블명 SET 열명1 = 값1, 열명2 = 값2, ... WHERE 조건식
- SET 구의 실행 순서 :  
 데이터 베이스 제품에 따라 그 처리 방식이 다름. 아래 예는 MySQL에서는 서로 다른 결괏값이 나오지만 Oracle에서는 어느 명령을 실행해도 결과 같음. 

ex)
1) UPDATE sample41 SET no = no + 1, a = no;



-> ① no 열의 값에 1을 더하여 no 열에 저장한 뒤, ② 그 값이  a열에 대입 됨. 



2) UPDATE sample41 SET a = no, no = no + 1;


-> ① no 열의 값을 a열에 먼저 대입한 후, ②  no열의 값을 +1 함.


===> MySQL에서는 
SET 구에 기술한 식의 순서대로 갱신 처리가 일어남.


그러나, Oracle에서 1,2 명령을 실행하면 항상 위의 2의 결과와 동일하게 처리됨.(a열의 값은 항상 no-1) 
즉, 
Oracle에서는 SET 구에 기술한 식의 순서가 처리에 영향을 주지 않음.  갱신식의 오른쪽에 위치한 
no열의 값이 항상 갱신 이전의 값을 반환. 
한편 MySQL에서는 SET 구에 기술된 순서로 갱신 처리가 일어나므로  no열의 값은 갱신 이전의 값이 아닌 갱신된 이후의 값을 반환. 

ex) UPDATE sample41 SET 
no = no + 1, a = no (원래 no값 1이라 가정)
Oracle  >>>   
no =  no(1) + 1, a = no(1 : 갱신 이전의 값)  ==> no : 2 , a = 1 
MySQL >>>   no =  no(1) + 1, a = no(2 : 갱신 이후의 값)  ==> no : 2 , a = 2 
 


4. NULL로 갱신하기 
- NULL 초기화 : UPDATE sample41 SET b = NULL; 
- NOT NULL제약이 있는 열은 갱신 X. 

반응형