본문 바로가기
CS/DataBase

데이터베이스 첫걸음 정리 - 18장. 데이터 갱신하기 - UPDATE

by yongckim 2022. 9. 10.
728x90
반응형

데이터 갱신 작업은 시스템을 다루는 과정에서 자주 발생합니다.

우리가 웹 사이트에 들어가서 사용자 정보 수정을 하는 등 데이터 갱신은 자주 일어날 수 있습니다.

이런 경우에 UPDATE 명령을 통해 데이터를 갱신할 수 있습니다.

UPDATE 문법

SQL에서 데이터를 갱신할 때 UPDATE 명령을 사용할 수 있습니다.

UPDATE 명령은 다음과 같이 사용할 수 있습니다.

UPDATE 테이블명 SET 열명 = 값 WHERE 조건식

UPDATE 명령을 실행하기 전에 기존 테이블에 어떤 데이터가 저장되어 있는지 SELECT 명령으로 확인하겠습니다.

SELECT * FROM sample

DELETE와 달리 UPDATE는 필드 단위로 데이터를 갱신할 수 있습니다.

WHERE 구에 조건을 지정하면 그에 일치하는 행을 갱신할 수 있습니다.

WHERE 구를 생략한 경우에는 DELETE의 경우와 마찬가지로 테이블의 모든 행이 갱신됩니다.

SET 구

앞서 소개한 것 처럼 UPDATE 명령에서는 SET 구를 사용하여 갱신할 열과 값을 지정합니다.

SET 열명 = 값

SET 구를 사용할때 다음과 같은 점은 유의해야 합니다.

  • = 는 비교 연산자가 아닌 값을 대입하는 대입연산자로 사용하게 됩니다.
  • 테이블에 존재하지 않는 값을 지정하면 에러가 발생하여 UPDATE 명령은 실행되지 않습니다.
  • UPDATE시 값은 상수로 지정해야 합니다. 예를들어, 수치형 열에는 수치형 리터럴로, 문자열형 열에는 문자열형 리터럴로 표기합니다.
  • 만약 갱신해야 할 값이 복수인 경우에는 “열 = 값"을 콤마로 구분하여 리스트형식으로 작성할 수 있습니다.

UPDATE 사용예시

이제 sample 테이블의 값을 수정해보겠습니다.

UPDATE sample SET b ='2022-08-31' WHERE id = 3;

UPDATE 명령의 WHERE 조건문 역시 DELETE 명령과 마찬가지로 조건에 일치하는 모든 행이 그 대상이 됩니다.

그리고 WHERE 구를 생략하면 모든 테이블의 모든 행이 갱신 대상이 됩니다.

WHERE 구를 생략하면 테이블의 모든 행이 갱신 대상이 됩니다.

즉, WHERE 구를 생략하거나 잘못 지정할 경우 DELETE 명령처럼 의도하지 않은 동작이 발생할 수 있으므로 주의해야 합니다.

복수열 갱신

UPDATE 명령의 SET 구에서는 필요에 따라 쉼표로 구분하여 갱신할 열을 여러 개 지정할 수 있습니다.

UPDATE 테이블명 SET 열명 1 = 값1, 열명2 = 값2 WHERE 조건식

이렇게 SET 구에 복수열을 지정하면 다음의 두 구문을 한구문으로 줄일 수 있습니다.

# 두구문
UPDATE sample SET a = 'aaa' WHERE id = 3;
UPDATE sample SET b = '2022-09-01' WHERE id = 3;

# 한구문
UPDATE sample SET a = 'aaa', b = '2022-09-01' WHERE id = 3;

이렇게 두구문을 한구문으로 줄이는 것이 요청이 한번만 가기때문에 더 효율적입니다.

SET 구의 실행 순서

SET 구로 여러 개의 열을 지정하면 한 번에 갱신할 수 있어 편리합니다.

하지만 사용하기 전에 SET 구는 어떤 순서로 갱신 처리를 하는지 알아야 잘못된 동작을 하는 것을 막을 수 있습니다.

먼저 다음 UPDATE 명령을 살펴봅시다.

# 1
UPDATE sample SET id=id+1, a=id;
# 2
UPDATE sample SET a=id, id=id+1

이 두 UPDATE 명령은 쉼표로 구분된 갱신 식의 순서가 서로 다릅니다.

두 식은 데이터베이스 제품에 따라 처리방식이 달라지는데 Oracle에서는 어느 명령을 실행해도 결과는 같지만MySQL의 경우 결과값이 달라집니다.

먼저 현재 테이블의 내용은 다음과 같습니다.

첫번째 SQL을 실행하면 다음과 같은 결과가 나옵니다.

UPDATE sample SET id=id+1, a=id;

id를 변경하고 a 값을 변경하기 때문에 id와 a의 값이 같아지는 것을 볼 수 있습니다.

이제 두번째 SQL을 실행시켜봅시다.

UPDATE sample SET a=id, id=id+1

id와 a의 값이 다른것을 볼 수 있는데 이는 a값을 id로 변경하고 id 값을 수정하기 때문에 이와 같은 결과가 나오게 된 것입니다.

MySQL 왼쪽의 식이 먼저 실행된다는 것을 기억하고 순서에 맞게 SET 구를 작성해야 합니다.

NULL로 갱신하기

UPDATE 명령으로 필드 값을 NULL로 갱신할 수도 있습니다.

UPDATE sample SET b=NULL WHERE id=3;

물론, NOT NULL 제약이 걸려있는 열의 경우에는 NULL이 허용되지 않습니다.

정리

  • UPDATE 명령을 사용하면 열의 데이터를 갱신할 수 있습니다.
  • UPDATE 명령에서 SET 구를 사용하여 갱신할 열과 값을 지정합니다.
  • SET 구에서 필요에 따라 쉼표로 갱신할 열들을 구분하여 복수개의 열을 갱신할 수 있습니다.
  • SET 구에서 왼쪽의 열부터 차례대로 갱신되기 때문에 사용할 때 순서에 유의해야 합니다.(MySQL의 경우)
  • 제약이 걸려있지 않은 경우 UPDATE 명령을 통해 필드 값을 NULL로 갱신할 수 있습니다.
반응형