[SQLite] UPDATE
SQLite의 UPDATE
문은 테이블의 기존 행을 수정하는 데 사용됩니다. 이를 통해 특정 조건을 만족하는 행의 열 값을 변경할 수 있습니다. UPDATE
문은 데이터를 정확하게 지정할 수 있는 WHERE
절과 함께 사용되어, 특정 행이나 조건에 맞는 모든 행을 업데이트할 수 있습니다.
단순한 행 업데이트
UPDATE Employees
SET Department = 'HR', Age = Age + 1
WHERE Name = 'John Doe';
이 예시에서는 Employees
테이블에서 Name
이 'John Doe'인 직원의 Department
를 'HR'로 변경하고, Age
를 1 증가시킵니다.
UPDATE FROM
UPDATE FROM
은 UPDATE 문이 데이터베이스의 다른 테이블에 의해 구동될 수 있도록 하는
SQL의 확장입니다. "대상" 테이블은 업데이트되는 특정 테이블입니다. UPDATE FROM
을
사용하면 업데이트가 필요한 행과 해당 행에 있어야 하는 새 값을 계산하는 데 도움이 되도록
데이터베이스의 다른 테이블과 대상 테이블을 조인할 수 있습니다.
UPDATE FROM
은 SQL 표준이 아니기 때문에 제품마다 구현 방식이 다릅니다. SQLite는
PostgreSQL와 비슷하고, SQL Server와 MySQL 구현과 약간 다릅니다.
UPDATE inventory
SET quantity = quantity - daily.amt
FROM (SELECT sum(quantity) AS amt, itemId FROM sales GROUP BY 2) AS daily
WHERE inventory.itemId = daily.itemId;
위의 예시는 inventory
테이블에서 itemId
가 daily
테이블의 itemId
와 일치하는
행의 quantity
를 daily
테이블의 amt
만큼 감소시킵니다.
이때, daily
테이블은 sales
테이블을 사용하여 계산됩니다.
OR 옵션 사용하기
SQLite의 UPDATE
문에서는 OR
옵션을 사용하여 충돌이 발생했을 때의 동작을 지정할 수 있습니다. OR
옵션에는 ABORT
, FAIL
, IGNORE
, REPLACE
, ROLLBACK
등이 있습니다.
- OR ABORT: 충돌이 발생하면 롤백 없이 에러 메시지를 출력하고 현재 명령을 중단합니다. 이는 기본 동작입니다.
- OR FAIL: 충돌이 발생하면 에러를 출력하고 현재 명령을 중단하지만, 롤백은 수행하지 않습니다.
- OR IGNORE: 충돌이 발생해도 무시하고 진행합니다. 충돌하는 행에 대해서는 업데이트를 수행하지 않습니다.
- OR REPLACE: 충돌이 발생하는 행을 삭제하고 새 행을 삽입합니다. 기본적으로 기존 행을 새 값으로 "교체"하는 동작을 합니다.
- OR ROLLBACK: 충돌이 발생하면 현재 트랜잭션을 롤백합니다.