[MySQL] 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.

iiingkeep·2024년 12월 29일

MySQL

목록 보기
1/2

MySQL Workbench에서 Error Code: 1175 에러 해결하기


문제 발생 상황

movies 테이블의 director_id 컬럼의 데이터를 업데이트 하기 위해 다음과 같은 쿼리를 실행했다.

UPDATE
	movies 
SET
	director_id =
    (SELECT director_id FROM directors WHERE name = movies.director);

하지만 쿼리 실행 후 Error Code: 1175 메세지를 받았다.

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

문제의 원인

DELETE 또는 UPDATE 쿼리를 실행 할 때 발생할 수 있는 에러로,
이는 MySQL의 안전한 업데이트 모드(Safe Update Mode)에서 발생한다.

안전한 업데이트 모드(Safe Update Mode)
사용자의 실수로 테이블의 모든 행을 업데이트하거나 삭제하는 것을 방지하기 위해 만들어진 보호 장치.

안전한 업데이트 모드가 활성화된 상태일 시, DELETE 또는 UPDATE 쿼리를 실행하려면 반드시 WHERE절을 사용해 키 컬럼(Primary key 또는 Unique key 컬럼)을 기반으로 조건을 설정해야 한다.

내가 실행하려고 했던 쿼리는 WHERE절이 없었고, 나도 몰랐던 안전한 업데이트 모드가 활성화 되어 있어서 1175 에러가 발생했던 것이다.


해결 방안

두 가지의 방법으로 해결이 가능하다.

1. 안전한 업데이트 모드 비활성화

1-1. 메뉴를 이용하는 방법

상단 Edit 메뉴 클릭 후 Preferences... 클릭

Preferences 창이 나오면 SQL Editor를 클릭한 후 맨 아래의 Safe Updates의 체크박스를 클릭해 비활성화

1-2. 쿼리 실행을 통한 비활성화

간단하게 진행할 수 있는 방법이다.
값을 0으로 주면 안전한 업데이트 모드가 비활성화 되며
값을 1로 주면 안전한 업데이트 모드가 다시 활성화 된다.

SET sql_safe_updates = 0;
SET sql_safe_updates = 1;

2. WHERE 절을 추가하여 조건 지정

안전한 업데이트 모드를 유지하면서 쿼리를 실행하기 위해 WHERE절을 추가한다.

예를 들어, movie_id가 NULL이 아닌 모든 영화의 director_id를 업데이트 하도록 다음과 같이 조건을 추가할 수 있으며, 안전하게 모든 영화에 대해 업데이트를 진행할 수 있다.

UPDATE
	movies 
SET 
	director_id = 
    (SELECT director_id FROM directors WHERE name = movies.director)
WHERE
	movie_id IS NOT NULL;

결론

Error Code: 1175는 안전한 업데이트 모드에서 발생하는 오류로, UPDATE나 DELETE 쿼리를 실행할 때 WHERE 절을 명확히 설정하지 않으면 발생한다.
이 문제를 해결하려면 두 가지 방법을 사용할 수 있다.

  1. 안전한 업데이트 모드를 비활성화하여 쿼리를 실행.
  2. 키 컬럼을 사용한 WHERE 절을 추가하여 조건을 지정하고 쿼리를 실행.

일반적으로 안전한 업데이트 모드를 유지하며 쿼리를 실행하는 것이 데이터베이스를 보호하는 좋은 방법이므로, WHERE절을 사용하는 것을 권장한다.

profile
혁신적인 백엔드 개발자가 되고자, 기록✏️

0개의 댓글