안녕하세요. SQLER의 코난 김대우입니다.
이번 강좌에서는, 3-2. UPDATE - 데이터 수정을 진행 하겠습니다.
SQLER에서 진행되는, 챗GPT와 함께 배우는 SQL Server 강좌 목록
이번에 진행할 강좌는 데이터 수정(UPDATE)입니다.
TL;DR
UPDATE 구문으로 테이블의 로우 데이터를 수정합니다. SET으로 컬럼과 값을 설정하고, WHERE 절로 업데이트 대상을 필터링합니다. 무결성 제약을 위반하지 않도록 주의해야 합니다.
UPDATE 구문 예제
먼저 UPDATE 구문 예제를 실행해 보도록 하겠습니다. Production.Product 테이블의 ProductID가 514인 제품을 조회합니다.
USE AdventureWorks; GO SELECT ProductID, Name, ListPrice FROM Production.Product WHERE ProductID = 514; GO
가격을 확인하면 133.34입니다. 이 제품의 가격을 두배로 수정하려면 어떻게 해야 할까요?
--업데이트를 수행해 ProductID가 514번인 LL Mountain Seat Assembly 제품의 ListPrice를 *2로 수정 UPDATE Production.Product SET ListPrice = ListPrice * 2 WHERE ProductID = 514; GO
SELECT 수행해 가격을 확인합니다.
SELECT ProductID, Name, ListPrice FROM Production.Product WHERE ProductID = 514; GO 결과 ProductID Name ListPrice ----------- ------------------------- -------------- 514 LL Mountain Seat Assembly 266.68
가격이 266.68로 수정되었습니다.
UPDATE 구문으로 문자열 값인 제품명을 변경해 보겠습니다.
-- 제품 이름을 수정 UPDATE Production.Product SET Name = N'LL 산악자전거 안장 부품' WHERE ProductID = 514; GO -- 데이터 조회 SELECT ProductID, Name, ListPrice FROM Production.Product WHERE ProductID = 514; GO
이렇게 문자열 값도 수정할 수 있습니다.
여러 컬럼 값을 한 번에 업데이트할 수도 있습니다.
-- 여러 컬럼을 한 번에 수정 UPDATE Production.Product SET Name = N'새로운 LL 산악자전거 안장 부품', ListPrice = ListPrice * 3 WHERE ProductID = 514; GO -- 데이터 조회 SELECT ProductID, Name, ListPrice FROM Production.Product WHERE ProductID = 514; GO
이렇게 동시에 여러 컬럼을 수정할 수 있습니다.
UPDATE 구문을 다시 체크해 볼게요. 테이블 명 다음에 SET 구문과 함께 수정할 컬럼 값을 설정합니다. 이어서, WHERE 절로 수정될 행을 필터링합니다.
로우 데이터 갱신 - UPDATE 구문 정보
테이블에 존재하는 로우 데이터를 수정합니다.
UPDATE {table_name | view_name} SET [{table_name | view_name}] column_name = expression[, column_name = expression...] [WHERE clause] |
SET: 변경할 컬럼과 값을 명시한다.
WHERE: 변경될 로우를 명시한다.
주의사항
UPDATE문이 무결성 제약을 위배한다면 갱신은 이루어지지 않는다.
☑️ 챗GPT 활용: 데이터 무결성 제약에 대해서 설명해 줘
WHERE 조건을 넣지 않고 UPDATE를 수행해 망한 경우
실제로도 발생하고 저도 겪어본 경험이 있습니다. WHERE 절 필터링 없이 UPDATE를 하면 어떤 일이 생길까요?
-- SELECT INTO로 Production.Product 테이블을 DoomProduct 테이블로 복사 SELECT * INTO DoomProduct FROM Production.Product; GO -- WHERE 조건 없이 DoomProduct 테이블을 업데이트 UPDATE DoomProduct SET Name = N'LL 산악자전거 안장 부품'; GO -- 테이블 조회 - 망했어요 SELECT * FROM DoomProduct; GO -- 테이블 삭제 DROP TABLE DoomProduct; GO
WHERE ProductID = 514로 특정 제품만 수정하려고 했는데 실수로 WHERE절을 빼고 수행한 경우입니다.
실수로 회사의 운영 환경(Production)에서 이런 문제가 발생했을 경우, 백업본이 없다면 회사에 비즈니스에 큰 영향이 있을 수 있습니다. 개인이 회사를 퇴사하는 정도로 끝나지 않을 수 있으니 주의에 또 주의해야 합니다.
이런 경우를 예방하기 위해 데이터 수정 작업을 하실 때에는, 운영 환경이 아닌 개발 환경에서 충분히 테스트하고, 이후 “트랜잭션(TRANSACTION) 강좌”에서 배우게 될 BEGIN TRAN / COMMIT TRAN 구문과 트랜잭션 격리 수준(Transaction Isolation Level)을 이용해 신중하게 수정하는 것이 좋습니다.
운영 환경에서 이런 상황이 발생할 경우, 이후에 강좌로 진행되는 백업본을 이용해(반드시 백업본이 있어야만) 지정 시간까지 복구(RESTORE - STOP AT)를 이용해 복원 가능합니다.
데이터를 수정 할때에는 항상 주의하세요.
☑️ 챗GPT 활용: 개발환경, 테스트환경, 스테이징환경, 운영환경 등 애플리케이션 개발 환경에 대해서 알려줘
SQL 강좌 책 구매
강좌가 도움이 되셨다면, 책으로 구매 가능합니다. 책 판매 수익금은 전액 코딩 교육 사회공헌 활동에 기부되며, 아래 링크에서 구매하시면 더 많은 금액이 기부됩니다.