Windows · SQLite 3.45.3. 본문의 첫 예제를 실행하여 표준 출력과 예상 결과가 일치함을 확인했습니다. 연습문제의 모든 입력을 검증한 것은 아닙니다.
이 글의 순서 4개 단락
할 일의 상태가 바뀌거나 끝낸 항목을 목록에서 지워야 할 때가 있습니다. SQLite에서는 UPDATE로 저장된 값을 수정하고 DELETE로 행을 삭제합니다. 두 문장에 WHERE를 붙이면 원하는 행만 선택할 수 있습니다.
어떤 행을 바꾸거나 지울까?
UPDATE는 SET 뒤에 바꿀 열과 새 값을 지정합니다. DELETE FROM은 지정한 테이블에서 행을 삭제합니다. 두 문장의 WHERE는 앞서 SELECT에서 사용한 것처럼 대상 행을 고르는 조건입니다.
핵심은 조건에 맞는 행이 변경 대상이라는 점입니다. 한 행만 바꾸려면 한 행을 가리키는 조건을 사용해야 합니다. 이 예제에서는 중복될 수 없는 기본 키 id로 할 일을 선택합니다.
할 일 상태를 바꾸고 삭제하기
환경은 SQLite입니다. 다음 예제는 앞 강의에서 배운 CREATE TABLE과 INSERT로 연습 데이터를 준비하므로 독립적으로 읽을 수 있습니다. 새 SQLite 연결에서 전체 코드를 순서대로 실행하는 상황을 가정합니다. TEMP TABLE은 현재 연결에서 사용할 임시 테이블입니다.
입력 데이터는 할 일 세 건입니다. 1번의 상태를 완료로 바꾸고, 이미 완료된 2번을 삭제한 후 남은 행을 조회합니다.
CREATE TEMP TABLE todos (
id INTEGER PRIMARY KEY,
title TEXT,
status TEXT
);
INSERT INTO todos (id, title, status) VALUES
(1, 'SQL 복습', '진행 중'),
(2, '책 반납', '완료'),
(3, '산책', '예정');
UPDATE todos
SET status = '완료'
WHERE id = 1;
DELETE FROM todos
WHERE id = 2 AND status = '완료';
SELECT id, title, status
FROM todos
ORDER BY id;

마지막 SELECT의 예상 결과는 다음과 같습니다. 열 구분 기호와 머리글의 표시 방식은 사용하는 SQLite 환경에 따라 다를 수 있습니다.
id | title | status
1 | SQL 복습 | 완료
3 | 산책 | 예정
UPDATE의 WHERE id = 1이 1번 행을 선택하고, SET status = '완료'가 그 행의 상태만 바꿉니다. 이어서 DELETE는 번호가 2이고 상태가 완료인 행을 삭제합니다. 3번 행은 어느 조건에도 맞지 않아 그대로 남습니다. 마지막 ORDER BY id는 결과를 번호순으로 보여 줍니다.
실수와 경계 조건
UPDATE나 DELETE에서 WHERE를 빠뜨리면 테이블의 모든 행이 대상이 됩니다. 변경하기 전에 같은 조건을 SELECT에 넣어 대상 행을 확인하는 습관이 유용합니다. 예를 들어 SELECT * FROM todos WHERE id = 2 AND status = '완료';로 삭제할 행을 미리 살펴볼 수 있습니다.
조건에 맞는 행이 없으면 수정하거나 삭제되는 행도 없습니다. 예를 들어 2번의 상태가 완료가 아니라면 예제의 DELETE는 그 행을 지우지 않습니다. 반대로 WHERE status = '완료'만 쓰면 완료된 행이 여러 개일 때 모두 삭제됩니다. NULL인 상태는 status = '완료' 조건을 만족하지 않습니다.
이 예제를 같은 연결에서 다시 처음부터 실행하면 같은 이름의 임시 테이블이 이미 있어 생성 단계에서 오류가 납니다. 처음 상태부터 다시 연습하려면 새 SQLite 연결에서 실행하세요.
연습문제와 풀이
위 예제가 끝난 상태에서 3번 할 일의 상태를 완료로 바꾸고, 남은 행을 번호순으로 확인해 보세요.
UPDATE todos
SET status = '완료'
WHERE id = 3;
SELECT id, title, status
FROM todos
ORDER BY id;
예상 결과는 1번 SQL 복습과 3번 산책이 모두 완료인 두 행입니다. id = 3이 3번 행만 선택하므로 1번 행은 바뀌지 않습니다.
참고 문서: SQLite UPDATE, SQLite DELETE.
CHECK THE SOURCE
참고한 공식 문서
기능 설명은 위 문서를 참고했으며, 예제의 입력·결과와 한계는 본문에 따로 기록했습니다.