[SQL] UPDATE SET 문: DB 데이터 수정 완벽 가이드

데이터베이스를 다루다 보면 이미 저장된 데이터를 수정해야 하는 경우가 빈번하게 발생합니다. 오타를 수정하거나, 정보가 변경되었거나, 특정 조건에 따라 일괄적으로 데이터를 갱신해야 할 때가 있죠. 이때 SQL에서는 UPDATE SET 명령어를 사용하여 테이블 내의 데이터를 효과적으로 수정할 수 있습니다.

오늘은 이 UPDATE SET 문의 기본적인 사용법부터 다양한 조건에 따른 활용 예시까지 자세히 알아보겠습니다.

1. UPDATE SET 문의 기본 구조

가장 먼저 UPDATE SET 문의 기본 형식을 살펴보겠습니다.

UPDATE 테이블명
SET 컬럼명1 = 변경할_값1,
    컬럼명2 = 변경할_값2,
    ...
WHERE 조건;
  • UPDATE 테이블명: 어떤 테이블의 데이터를 수정할지 지정합니다.
  • SET 컬럼명 = 변경할_값: 어떤 컬럼의 값을 어떤 값으로 변경할지 지정합니다. 하나 이상의 컬럼을 동시에 변경할 수 있으며, 각 변경 사항은 쉼표(,)로 구분합니다.
  • WHERE 조건: 어떤 행(row)의 데이터를 수정할지 조건을 명시합니다. 이 WHERE 절은 매우 중요하며, 생략할 경우 테이블의 해당 컬럼 전체 데이터가 변경될 수 있으므로 주의해야 합니다.

2. WHERE 절: 안전장치의 중요성

UPDATE 문에서 WHERE 절은 마치 자동차의 브레이크와 같습니다. 만약 WHERE 절 없이 UPDATE 문을 실행하면, 지정한 컬럼의 모든 행SET 절에서 정의한 값으로 변경됩니다. 이는 의도치 않은 대규모 데이터 변경을 초래할 수 있으므로, UPDATE 문을 실행하기 전에는 항상 WHERE 절을 꼼꼼히 확인하는 습관을 들여야 합니다.

예시: WHERE 절 없이 모든 제품 가격을 10000원으로 변경 (주의!)

-- ProductTable의 모든 제품 가격을 10000으로 변경
UPDATE ProductTable
SET Price = 10000;

실수로 위와 같이 실행하면 모든 제품의 가격이 10000원이 되어버립니다. 따라서 WHERE 절을 사용하여 특정 조건을 만족하는 데이터만 수정하도록 하는 것이 일반적입니다.

3. 다양한 UPDATE 활용 예시

이제 몇 가지 구체적인 시나리오를 통해 UPDATE 문을 어떻게 활용할 수 있는지 살펴보겠습니다.

3.1. 특정 조건에 맞는 데이터 수정하기

가장 일반적인 경우입니다. 예를 들어, users이라는 사용자 테이블에서 UserID가 'user001'인 사용자의 이메일 주소를 변경하고 싶다고 가정해봅시다.

UPDATE할 기본 데이터는 이전에 작성한 INSERT INTO 설명글의 기본 예제(1.1 섹션)로 하겠습니다.

변경 전 users 데이터 (예시)

UserID UserName Email Point
user001 김철수 old@example.com 1000
user002 이영희 young@example.com 1500

SQL 쿼리

db-fiddle 사용하실 경우 다음 쿼리를 위의 기본 예제 Schema SQL 아래에 그대로 입력하면 됩니다.

UPDATE users
SET Email = 'new_kim@example.com'
WHERE UserID = 'user001';

변경 후 users 데이터

UserID UserName Email Point
user001 김철수 new_kim@example.com 1000
user002 이영희 young@example.com 1500

3.2. 여러 컬럼 값을 동시에 수정하기

하나의 UPDATE 문으로 여러 컬럼의 값을 동시에 변경할 수도 있습니다. UserID가 'user002'인 사용자의 Point를 2000으로, UserName을 '이수정'으로 변경해 보겠습니다.

SQL 쿼리

UPDATE users
SET Point = 2000,
    UserName = '이수정'
WHERE UserID = 'user002';

변경 후 users 데이터

UserID UserName Email Point
user001 김철수 new_kim@example.com 1000
user002 이수정 young@example.com 2000

3.3. 기존 값에 연산하여 수정하기

때로는 기존 값에 특정 값을 더하거나 빼는 등의 연산을 통해 데이터를 수정해야 할 때도 있습니다. 예를 들어, 모든 사용자에게 Point를 100점씩 추가 지급하는 경우입니다.

SQL 쿼리

UPDATE users
SET Point = Point + 100;

이 경우 WHERE 절이 없으므로, users의 모든 사용자의 Point가 기존 Point에 100이 더해진 값으로 변경됩니다.

변경 후 users 데이터 (위 예시에서 이어짐)

UserID UserName Email Point
user001 김철수 new_kim@example.com 1100
user002 이수정 young@example.com 2100

3.4. NULL 값을 특정 값으로 변경하기

데이터를 입력하다 보면 특정 컬럼 값이 비어있는 경우, 즉 NULL인 경우가 있습니다. 예를 들어, Phone 컬럼이 NULL인 사용자들에게 '연락처 미등록'이라는 Comment를 추가하고 싶다면 다음과 같이 작성할 수 있습니다.

변경 전 users 데이터 (Phone, Comment 컬럼 추가)

UserID UserName Email Point Phone Comment
user001 김철수 new_kim@example.com 1100 010-1111-1111
user002 이수정 young@example.com 2100 NULL
user003 박지성 park@example.com 500 NULL

SQL 쿼리

UPDATE users
SET Comment = '연락처 미등록'
WHERE Phone IS NULL;

변경 후 users 데이터

UserID UserName Email Point Phone Comment
user001 김철수 new_kim@example.com 1100 010-1111-1111
user002 이수정 young@example.com 2100 NULL 연락처 미등록
user003 박지성 park@example.com 500 NULL 연락처 미등록

3.5. NULL이 아닌 값을 찾아 수정하기

반대로, 특정 컬럼에 값이 있는 (NULL이 아닌) 경우를 조건으로 데이터를 수정할 수도 있습니다. Phone 컬럼에 값이 있는 사용자들의 Comment를 '연락처 등록됨'으로 변경하는 예입니다.

SQL 쿼리

UPDATE users
SET Comment = '연락처 등록됨'
WHERE Phone IS NOT NULL;

변경 후 users 데이터 (위 예시에서 이어짐)

UserID UserName Email Point Phone Comment
user001 김철수 new_kim@example.com 1100 010-1111-1111 연락처 등록됨
user002 이수정 young@example.com 2100 NULL 연락처 미등록
user003 박지성 park@example.com 500 NULL 연락처 미등록

4. UPDATE 사용 시 주의사항

UPDATE 문은 데이터를 직접 수정하는 강력한 명령어인 만큼, 사용 시 몇 가지 주의사항을 염두에 두어야 합니다.

  1. WHERE 절 확인: 앞서 강조했듯이, WHERE 절이 올바르게 작성되었는지, 의도한 데이터만 수정하는지 반드시 확인해야 합니다.
  2. 백업: 중요한 데이터를 수정하기 전에는 항상 데이터를 백업하는 것이 안전합니다. 만약의 사태에 대비하여 복구할 수 있도록 준비해야 합니다.
  3. 트랜잭션(Transaction) 활용: 여러 UPDATE 문을 실행하거나, 작업의 원자성이 중요한 경우 트랜잭션을 사용하여 COMMIT 또는 ROLLBACK 할 수 있도록 하는 것이 좋습니다.
  4. 테스트 환경에서 검증: 실제 운영 환경(Production)에 적용하기 전에, 개발 또는 테스트 환경에서 충분히 검증하여 예상치 못한 결과를 방지해야 합니다.

마무리

오늘은 SQL의 UPDATE SET 문을 사용하여 데이터베이스의 값을 수정하는 방법에 대해 알아보았습니다. 기본 구문부터 다양한 조건절 활용, 그리고 주의사항까지 살펴보았는데요. UPDATE 문은 데이터 관리의 필수적인 기능이지만, 강력한 만큼 신중하게 사용해야 합니다.

오늘 배운 내용을 바탕으로 실제 데이터를 안전하고 효과적으로 수정하는 데 도움이 되시기를 바랍니다!