ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • SQL UPDATE (데이터 갱신하기)
    Database 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

    '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
Designed by Tistory.