본문 바로가기
프로젝트

[MySQL] 괄호를 포함한 기존 데이터 내용 수정하기

by 왕자두 2023. 12. 1.

문제 상황

기존에 저장했던 데이터의 수가 굉장히 많았고 이와 연관된 데이터가 많아 함부로 데이터를 삭제하거나 행 자체를 수정하기 어려워, 괄호와 내부 내용을 포함하고 있는 데이터들과 같이 수정이 필요한 한 속성의 데이터들만 골라서 괄호를 포함하여 괄호 내부 내용을 삭제할 수 있도록 하는 코드를 작성해야함

위와 같은 괄호 내부 내용만 삭제

 

해결 방법

update {테이블명} set {컬럼명} = CONCAT(
    SUBSTRING_INDEX({컬럼명}, '(', 1),
    SUBSTRING_INDEX({컬럼명}, ')', -1)
  )
WHERE {컬럼명} REGEXP '\\(.*\\)';

 

발생 가능한 오류

Error Code: 1175. You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column.  To disable safe mode, toggle the option in Preferences -> SQL Editor and reconnect.

위 오류는 Safe Update Mode로 인해 발생한다. 이 모드에서는 Update나 Delete 쿼리를 실행할 때 Where 절에 키 컬럼을 사용하지 않으면, 전체 테이블의 데이터를 수정하는 것을 방지하기 위해 에러가 발생

 

오류 해결 방법 #1

Where절에 키 컬럼 사용하기

WHERE id = your_id;

위와 같이 Where 조건문 추가해서 작성하기

-> 해당 방법을 사용하여 모든 칼럼 대신 중간에 나눠서 두 번에 걸쳐 진행

 

오류 해결 방법 #2

Safe Update Mode 비활성화

- 메뉴 > Edit > Preferences > 왼쪽 탐색창 > SQL Editor

- Safe Updates 옵션 > OK 클릭

- MySQL Workbench 재시작 후, 쿼리 재실행

 

실행 결과

괄호에 있던 내용이 사라짐