Recent Posts
Recent Comments
Archives
반응형
250x250
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Today
Yesterday

Total
05-05 03:02
관리 메뉴

Hey Tech

[SQLite] 데이터 추가/변경하기(UPDATE, REPLACE INTO, INSERT OR IGNORE INTO) 본문

AI & 빅데이터/SQLite

[SQLite] 데이터 추가/변경하기(UPDATE, REPLACE INTO, INSERT OR IGNORE INTO)

Tony Park 2021. 2. 21. 10:04
728x90
반응형

안녕하세요, 오늘은 SQLite 기반에서 UPDATE, REPLACE, INSERT OR IGNORE 구문 사용법에 대해 공유해 드립니다.

바로 시작하죠!

목차

1.  UPDATE: 데이터 변경하기
2.  REPLACE INTO: 데이터 추가 또는 변경하기
3.  INSERT OR IGNORE INTO: 특정 데이터가 없을 시에만 데이터 추가하기
    3.1.  데이터가 기존에 없는 경우
    3.2.  데이터가 기존에 있는 경우
    3.3.  데이터가 기존에 존재함에도 INSERT INTO를 사용한 경우

들어가며...

이전 포스팅에서 테이블을 새롭게 생성하고 데이터를 추가하는 방법에 대해 다루었습니다.

employee 테이블은 아래 그림 1 과 같이 직원id(primary key + auto increment), 직원명, 부서명, 직급, 입사일 정보를 담고 있습니다.

그림 1. employee 테이블

1.  UPDATE: 데이터 변경하기

이름이 tony park인 직원의 부서를 Data Analysis로 변경해 보겠습니다.

특정 조건을 만족하는 행의 값을 변경할 때 사용하는 구문이 UPDATE입니다.

-- UPDATE: 데이터 변경하기
-- 변경할 테이블 이름 입력
UPDATE employee
-- 변경할 칼럼과 데이터 설정
SET department = 'Data Analysis'
-- 변경할 행을 조건문을 통해 선별
WHERE name = 'tony park'

위 소스코드와 같이 UPDATE 구문을 먼저 써준 후에 테이블 이름을 입력합니다.

그리고 SET 키워드에 데이터를 변경할 칼럼과 새롭게 입력할 데이터를 입력합니다.

변경할 행을 찾기 위한 조건문을 WHERE 구문을 활용해 작성합니다.

SELECT * 
FROM employee;

데이터가 정상적으로 변경되었는지 확인합니다.

 

그림 2. 데이터가 변경된 테이블

위의 그림 2 와 같이 이름이 tony park인 직원의 부서가 변경된 것을 확인하실 수 있습니다.

2.  REPLACE INTO: 데이터 추가 또는 변경하기

REPLACE INTO는 특정 칼럼 내 데이터가 없을 때는 새롭게 데이터를 추가하고, 데이터가 기존에 존재한다면 해당 데이터를 삭제하고 새로운 데이터를 추가해 주는 기능입니다. 또한 REPLACE INTO는 데이터가 테이블 내에 존재한다면 중복으로 데이터가 추가되는 것을 방지합니다.

-- id 값이 3인 행의 데이터 추가하기 
REPLACE INTO employee (id, name, department, position, join_date)
VALUES (3, 'adam won', 'AD', 'Assistant', '2017-08-10');

Primary key 값인 id 칼럼 내 데이터가 3인 행의 데이터를 변경하는 소스코드입니다.

SELECT * FROM employee;

데이터가 정상적으로 변경되었는지 확인합니다.

그림 2 와 같이 id 칼럼 내 3이라는 데이터의 행이 없기 때문에 아래 그림 3 과 같이 해당 행의 데이터가 추가된 것을 확인할 수 있습니다.

그림 3. 데이터가 새롭게 추가된 테이블

REPLACE INTO  vs  UPDATE

UPDATE는 기존에 테이블 내에 특정 조건을 만족하는 행이 존재할 때만 데이터를 변경할 수 있지만, REPLACE INTO는 기존에 데이터가 없을 때는 아예 데이터를 새롭게 추가해 준다는 점에 차별점이 있습니다.

REPLACE INTO  vs  INSERT INTO

INSERT INTO의 경우에는 추가/변경할 데이터가 기존 테이블 내 존재 여부와 상관없이 중복으로 데이터를 추가하지만, REPLACE INTO는 같은 데이터가 테이블 내에 존재한다면 이를 중복으로 저장하는 작업을 방지해 준다는 점에 차별점이 있습니다.

3.  INSERT OR IGNORE INTO:  특정 데이터가 없을 시에만 데이터 추가하기

INSERT OR IGNORE INTO는 특정 데이터가 테이블에 없을 시에만 데이터를 추가하며, 이미 특정 데이터가 테이블에 존재한다면 데이터 추가 명령을 무시하는 기능을 수행합니다.

3.1.  데이터가 기존에 없는 경우

INSERT OR IGNORE INTO employee (id, name, department, position, join_date)
VALUES (5, 'david chae', 'Web Develoment', 'manager', '2016-06-13');

테이블에 id 칼럼 내 값이 5인 행이 없는 테이블에 새롭게 데이터를 추가하는 소스코드를 작성해 보았습니다.

SELECT * FROM employee;

데이터가 정상적으로 추가되었는지 확인합니다.

id 칼럼 내 5라는 값을 가지는 행이 없기 때문에 그림 4 와 같이 새롭게 데이터가 추가된 것을 확인할 수 있습니다.

그림 4. 데이터가 새롭게 추가된 테이블

3.2.  데이터가 기존에 있는 경우

INSERT OR IGNORE INTO employee (id, name, department, position, join_date)
VALUES (5, 'anderson cho', 'Account', 'intern', '2021-01-13');

그림 4 와 같이 테이블에 id 칼럼 내 값이 5인 행이 이미 존재할 때 INSERT OR IGNORE INTO 구문을 활용하여 데이터 추가를 시도할 때는 테이블 변화는 어떻게 될까요? 위와 같이 코드를 작성해 보았습니다.

SELECT * 
FROM employee;

테이블의 변화를 살펴보겠습니다.

 

그림 5. 변화된 행의 개수가 0임을 알려주는 메시지
그림 6. 데이터 변화가 없는 테이블

그림 5그림 6 과 같이 테이블 내 데이터 변화가 전혀 없는 것을 확인할 수 있습니다.

이처럼 INSERT OR IGNORE INTO는 추가하고자 하는 데이터가 기존의 테이블에 없는 경우에만 새롭게 데이터를 추가합니다.

3.3.  데이터가 기존에 존재함에도 INSERT INTO를 사용한 경우

만일 위와 같이 테이블 내 프라이머리 키에 해당하는 데이터(id)가 존재함에도 불구하고 INSERT OR IGNORE INTO 구문을 작성하지 않고 INSERT INTO 구문을 통해 데이터 추가를 시도한다면 어떻게 될까요?

INSERT INTO employee (id, name, department, position, join_date)
VALUES (5, 'anderson cho', 'Account', 'intern', '2021-01-13');

위와 같이 프라이머리 키 값인 id 칼럼 내 이미 5라는 값을 가지는 행이 존재함에도 INSERT INTO 구문을 통해 데이터 추가를 시도하면

아래 그림 7 과 같은 오류 메시지와 함께 데이터 추가가 정상적으로 이루어지지 않는 것을 알 수 있습니다.

따라서 이러한 오류를 방지하기 위해 INSERT OR IGNORE INTO 구문을 사용하는 것입니다.

 

그림 7. 데이터 추가 오류

마치며...

오늘은 테이블 내 데이터 추가/변경 시 사용하는 UPDATE, REPLACE INTO, INSERT OR IGNORE INTO 구문에 대해 알아보았습니다.

각 구문이 어떤 상황에서, 어떤 목적으로 사용하는지 구분하여 실무에서 활용할 수 있도록 구문별 특징을 명확하게 파악할 필요가 있습니다.


포스팅 내용에 오류가 있을 경우 댓글 남겨 주시면 감사드리겠습니다.

그럼 오늘도 건강한 하루 보내시길 바랍니다 :-)

고맙습니다.

728x90
반응형
Comments