-
SQL UPDATE (데이터 갱신하기)Database 2021. 3. 25. 15:34728x90
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 첫걸음/ 아사이 아츠시 지음/ 한빛미디어
728x90'Database' 카테고리의 다른 글
SQL COUNT 집계함수 (0) 2021.03.29 물리삭제와 논리삭제 (0) 2021.03.29 SQL DELETE(행 삭제하기) (2) 2021.03.25 SQL INSERT(행 추가하기) (0) 2021.03.25 SQL CASE (0) 2021.03.17