...
테이블 데이터 delete 안되는 현상 해결법
MySQL 워크벤치에서 테이블의 데이터를 삭제하였는데, 아무 문제없이 삭제되어야 하지만 다음과 같이 에러가 나오는 것을 볼 수 있을 것이다.
delete from 테이블명 where 지우고자하는 데이터 대상;
> 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에 제약조건이 존재하는 것도 아니고 왜 멀쩡한 쿼리문인데 에러를 내는 것일까?
대략 해석하자면 세이프 모드를 사용하고 있기 때문에 KEY column을 사용하는 WHERE 문 없이는 테이블을 업데이트 할 수 없다는 뜻이다.
즉, 데이터베이스의 세이프 모드를 해제하면 해결 되는 현상이다.
세이프 모드 란?
update 또는 delete 할 때 where 절이 없거나 where 절에 key column 외의 비교문일 때,
즉, 한번에 여러 row 를 업데이트할 때, 막아두는게 Safe mode On 이다.
워크벤치에서 사용자의 실수를 줄이고자 안전모드를 걸어두지 않았나 싶다.
1. 워크벤치 환경 설정
상단 메뉴바의 Edit → Preference 를 클릭하거나, 우측 상단의 톱니바퀴 모양을 누른다.
그리고 SQL Editor 항목을 하단 부분에 Safe Updates 항목을 체크해제하면 된다.
이제 delete 쿼리를 실행하면 정상적으로 지워짐을 확일 할 수 있다.
Safe mode는 웬만하면 해놓는 것이 좋다.
실수로 소중한 데이터를 삭제하거나 수정해버리면 큰일나기 때문이다. (디폴트로 설정되어 있는 이유가 있는 것이다)
2. 환경변수 쿼리 설정
워크벤치 전역 설정으로 세이프 모드를 비활성화 하기에는 약간 찜찜하다면, 환경변수를 통해 일시적으로 해제 할 수도 있다.
예를 들어 DB 데이터 안정성을 위해 세이프 모드를 항상 사용하다, 특정 경우에는 Safe mode를 off 하고 싶은 경우, 다음과 같이 쿼리를 실행하기전에 Safe mode를 끄고 쿼리 실행후 다시 Safe mode를 키는 식으로 구성할 수 있다.
set SQL_SAFE_UPDATES = 0; -- disable safe mode
delete from table where num > 1;
set SQL_SAFE_UPDATES = 1; -- enable safe mode
이 글이 좋으셨다면 구독 & 좋아요
여러분의 구독과 좋아요는
저자에게 큰 힘이 됩니다.