상위 목록: 하위 목록: 작성 날짜: 읽는 데 17 분 소요

데이터 수정(Data Update)

데이터베이스(Database)를 활용하다 보면 테이블(Table)의 데이터(Data)를 변경하거나 최신화 하는 작업이 필요합니다.

다음과 같은 테이블에서 특정 값을 변경하려고 합니다.


  location date variant num_sequences perc_sequences num_sequences_total
1 Angola 2020-12-21 B.1.160 0 0 93
2 Angola 2020-12-21 B.1.620 0 0 93
3 Angola 2020-12-21 B.1.258 0 0 93
4 Angola 2020-12-21 B.1.221     93

만약, location 필드의 Angola앙골라라는 값으로 변경한다면 다음과 같은 형태로 표현됩니다.


  location date variant num_sequences perc_sequences num_sequences_total
1 앙골라 2020-12-21 B.1.160 0 0 93
2 앙골라 2020-12-21 B.1.620 0 0 93
3 앙골라 2020-12-21 B.1.258 0 0 93
4 앙골라 2020-12-21 B.1.221     93



안전 모드 해제

데이터를 변경하기 위해서는 안전 모드(Safe Mode)를 해제해야 합니다.

안전 모드는 데이터를 보호하기 위해 설정되어 있습니다.

하지만, 데이터를 변경할 예정이므로 안전 모드를 비활성화 합니다.


MySQL Workbench

MySQL Workbench의 상단 메뉴창에서 Workbench Preferences 창을 엽니다.

Workbench PreferencesMySQL WorkbenchEditPreferences...를 클릭합니다.

Workbench Preferences 메뉴창이 열렸다면, SQL EditorOther에서 Safe Updates의 체크 박스를 해제하여 안전 모드를 비활성화 합니다.

안전 모드가 비활성화 된다면 데이터를 수정할 수 있습니다.


MySQL Console

SET SQL_SAFE_UPDATES = 0;

콘솔 창에서는 SET SQL_SAFE_UPDATES = 0; 명령어를 통해 안전 모드를 비활성화 할 수 있습니다.

MySQL Workbench를 사용하지 않는 환경에서는 위와 같이 안전 모드를 비활성화 할 수 있습니다.



열 수정

단일 열 수정

UPDATE `covid`.`variants` 
SET 
    `location` = '앙골라'
WHERE
    location = 'Angola';

테이블에 행을 수정하는 방법은 UPDATE `{데이터베이스의 이름}`.`{테이블의 이름}` SET {열의 이름} = {수정하려는 값} WHERE {조건};의 구조로 명령어를 실행합니다.

위와 같은 조건으로 명령어를 실행한다면, location 열에서 Angola라는 값을 가지는 값은 location 열의 값을 앙골라로 변경합니다.

이 경우, 해당 조건에 만족하는 모든 행의 값이 변경됩니다.


다중 열 수정

UPDATE `covid`.`variants` 
SET 
    `num_sequences` = 0,
    `perc_sequences` = 0
WHERE
    `date` < DATE('2021-01-01')
AND `num_sequences` < 100

SET 구문 뒤에 쉼표(,)를 통해 한 번에 여러 열의 값을 수정할 수 있습니다.

또한 조건을 더 복잡하게 구현할 수도 있는 데, 위 예시의 경우에는 다음과 같은 조건을 모두 만족하는 경우에만 값이 변경됩니다.

  1. date의 값이 2021-01-01 이전의 데이터
  2. num_sequences의 값이 100 미만인 데이터

위 두 조건을 만족하는 데이터의 경우 num_sequencesperc_sequences의 값은 모두 0으로 변경됩니다.

조건문에는 AND, OR 등을 활용하여 다양한 조건식을 적용할 수 있습니다.



행 수정

특정 행 하나 이상 수정하려는 경우 행을 구분하는 고유값이 존재해야 합니다.

현재 테이블에서는 고유값이 존재하지 않으므로, 테이블 수정을 통해 id 열을 추가합니다.


ALTER TABLE `covid`.`variants` ADD `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST;

테이블에 INT 형식을 가지며 NOT NULL, AUTO_INCREMENT, PRIMARY KEY 속성을 부여하고, 테이블의 가장 앞 쪽에 열를 추가합니다.

자세한 사항은 MySQL 강좌 : 제 3강 - 테이블에서 확인해보실 수 있습니다.


특정 행 수정

UPDATE `covid`.`variants` 
SET 
    `num_sequences` = 99,
    `perc_sequences` = 99
WHERE
    `id` = 1

특정 행을 수정하는 방식은 열을 모든 데이터를 수정하는 방식과 동일합니다.

단, id 열은 PRIMARY KEY 속성이 부여되어 있기 때문에 중복되지 않는 고유한 값입니다.

그러므로, 조건을 id로 설정하여 해당 id를 가지고 있는 행의 데이터만 수정할 수 있습니다.

특별한 경우가 아니라면 테이블마다 고유한 id를 가지고 있는 것이 좋습니다.

또는 다른 테이블에서 파생된 데이터나 참조하는 데이터가 되도록 다른 테이블의 id 값과 동일한 값을 사용합니다.

위와 같은 경우에는 id가 중복될 수 있습니다.

id가 존재하지 않는 데이터의 경우 강제로 id를 부여하거나, 행의 번호(Row Number)를 사용할 수 있습니다.

댓글 남기기