MySQL 강좌 : 제 6강 - 데이터 수정
데이터 수정(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 Preferences는 MySQL Workbench → Edit → Preferences...를 클릭합니다.

Workbench Preferences 메뉴창이 열렸다면, SQL Editor → Other에서 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` < 100SET 구문 뒤에 쉼표(,)를 통해 한 번에 여러 열의 값을 수정할 수 있습니다.
또한 조건을 더 복잡하게 구현할 수도 있는 데, 위 예시의 경우에는 다음과 같은 조건을 모두 만족하는 경우에만 값이 변경됩니다.
date의 값이2021-01-01이전의 데이터num_sequences의 값이100미만인 데이터
위 두 조건을 만족하는 데이터의 경우 num_sequences와 perc_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)를 사용할 수 있습니다.
공유하기
Kakao
Naver
Twitter
LinkedIn
Facebook
댓글 남기기