Database

SQL UPDATE (데이터 갱신하기)

codermun 2021. 3. 25. 15:34
728x90
반응형

RDBMS에서는 UPDATE 명령을 사용하여 데이터를 갱신할 수 있다.

UPDATE 명령은 셀 단위데이터를 갱신 할 수 있으며 WHERE 구로 조건을 지정하여 일치하는 행에 대해 값을 갱신할 수 있다.

(DELETE와 마찬가지로 WHERE 구를 생략할 경우 테이블의 모든 행이 갱신된다!)
(당연히 자료형에 맞는 값을 입력해야 한다.)


UPDATE 데이터 갱신하기

UPDATE products(테이블명) SET 열명 WHERE 조건식; 

 

 

 

update products set discount_id=1 where id=75;

 

 


UPDATE로 NULL 갱신하기

UPDATE products SET discount_id=NULL;

아래와 같이 NULL 값으로 갱신하는 것을 보통 NULL 초기화라 부른다.

당연히 NOT NULL 제약이 설정되지 있지 않는 열에 대해서는 NULL로 갱신할 수 없다.


SET 구에 복수의 열도 지정할 수 있다.

update products set discount_id=2, is_in_stock=2 where id=75;

 


SET 구의 = 연산자 의미

이때 =  는 "비교 연산자"가 아닌, "대입 연산자"라는 것을 인지하자.

discount_id 가 2인지가 궁금한거이 아니라 2를 대입하겠다는 의미이다.

WHERE 구와 다르다는 것을 인지하자!


SET 구의 실행 순서

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

위와 같은 환경에서 SET구의 실행 순서를 알아보자

데이터베이스 제품에 따라 결과가 달라질수있다

MySQL에서는 입력 순서에 따라 갱신된다.

Oracle에서는 입력 순서가 갱신 순서에 영향을 미치지 않는다.


먼저, MySQL

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

갱신 순서는 입력한 순서에 따라 변경된다!!

no= no +1 이 먼저 갱신된 후 갱신된 후의 no값이 a에 할당된다.

a = 1 이 아닌, a = 2가 되는 것이다.

(갱신 전 no =1 , 갱신 후 no = 2)

다음으로 2번 명령어를 실행 한다.

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

이때 a = no가 먼저 갱신 된다.

아래 결과를 보면 a 의 값은 변화가 없다!

이처럼 MySQL에서는 SET 구에 기술한 식의 순서대로 갱신 처리가 일어난다.


Oracle의 SET 구 갱신 순서

Oracle은 식의 순서가 갱신 순서에 영향을 미치지 않는다.

정리해보자면 아래와 같다.

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 

 

 

 

출처 :

SQL 첫걸음/ 아사이 아츠시 지음/ 한빛미디어

smilejh.tistory.com/18

728x90
반응형