logo

[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 테이블에서 itemIddaily 테이블의 itemId와 일치하는 행의 quantitydaily 테이블의 amt 만큼 감소시킵니다. 이때, daily 테이블은 sales 테이블을 사용하여 계산됩니다.

 

OR 옵션 사용하기

SQLite의 UPDATE 문에서는 OR 옵션을 사용하여 충돌이 발생했을 때의 동작을 지정할 수 있습니다. OR 옵션에는 ABORT, FAIL, IGNORE, REPLACE, ROLLBACK 등이 있습니다.

  • OR ABORT: 충돌이 발생하면 롤백 없이 에러 메시지를 출력하고 현재 명령을 중단합니다. 이는 기본 동작입니다.
  • OR FAIL: 충돌이 발생하면 에러를 출력하고 현재 명령을 중단하지만, 롤백은 수행하지 않습니다.
  • OR IGNORE: 충돌이 발생해도 무시하고 진행합니다. 충돌하는 행에 대해서는 업데이트를 수행하지 않습니다.
  • OR REPLACE: 충돌이 발생하는 행을 삭제하고 새 행을 삽입합니다. 기본적으로 기존 행을 새 값으로 "교체"하는 동작을 합니다.
  • OR ROLLBACK: 충돌이 발생하면 현재 트랜잭션을 롤백합니다.
Previous
DELETE