MySQL 오류 코드 : MySQL Workbench에서 업데이트 중 1175


816

나는 열을 업데이트하기 위해 노력하고있어 visited그것을 값 1. 내가 사용하는 MySQL의 워크 벤치를 제공하기 위해, 나는 워크 벤치 내부에서 SQL 편집기에서 문을 쓰고 있어요. 다음 명령을 작성 중입니다.

UPDATE tablename SET columnname=1;

다음과 같은 오류가 발생합니다.

안전 업데이트 모드를 사용 중이고 KEY 열을 사용하는 WHERE없이 테이블을 업데이트하려고했습니다. 안전 모드를 비활성화하려면 옵션 ...을 전환하십시오.

지침을 따르고 메뉴 에서 safe update옵션을 Edit선택한 Preferences다음 확인을 취소했습니다 SQL Editor. 동일한 오류가 계속 발생하며이 값을 업데이트 할 수 없습니다. 제발, 무슨 일인지 말해봐?


4
방문한 = 0 인 테이블의 모든 행을 방문한 = 1로 업데이트한다는 것을 알고 있습니까? 이것이 당신이 원하는 것입니까?
마크 바이어스

23
"안전 업데이트"를 선택 해제 한 후 아래 단계를 수행하십시오. 쿼리-> 서버에 다시 연결. 이제 검색어를 실행하십시오
Ripon Al Wasim

5
이 변경 사항을 적용하려면 MySQL 서버에 다시 연결 (MySQL 연결을 다시 시작)해야합니다.
Philip Olson

답변:


1612

MySql 세션에 안전 업데이트 옵션이 설정된 것 같습니다. 즉 primary key, where 절에 키 (예 :)를 지정하지 않으면 레코드를 업데이트하거나 삭제할 수 없습니다 .

시험:

SET SQL_SAFE_UPDATES = 0;

아니면 규칙 (사용 따르지 쿼리 수정할 수 primary key있는을 where clause).


나는 명령을 입력 한 id와 동일한 효과를 갖는 GUI에서 안전 업데이트 옵션을 이미 비활성화했다고 언급했습니다. 그러나 답변 해 주셔서 감사하지만 이미 내 질문에 답변했습니다. 내 대답을 확인하여 문제가 무엇인지 확인하십시오.
배심원 A

8
GUI에서 옵션을 변경 한 후 설정을 올바르게 설정하려면 데이터베이스에 다시 연결해야합니다.
Tim Koscielski

31
SET SQL_SAFE_UPDATES = 1유용한 안전 기능이므로 완료시이를 다시 설정하십시오 .
StockB

4
StockB에 동의하지 않습니다. SQL 사용에 익숙해지면서 계속 유지하고 싶을 수도 있습니다. 그러나 일단 당신이하고있는 일을 알게되면 ... 그 일은 완전히 쓸모가 없습니다. 어쨌든 프로덕션 서버에서 물건을 개발해서는 안됩니다. 따라서 엉망이더라도 파괴해야 할 유일한 것은 dev 서버입니다. 어쨌든 아무도 대담하지 않습니다.
Mathieu Turcotte

3
나는 11 년 동안 항상이 옵션을 false로 설정했기 때문에 지난 6 개월 동안이 게시물을 20 번과 같이 검색했다고 말했지만 이제는 개발 및 생산 에서이 설정을 사용하는 회사에서 일하고 있습니다. 예를 들어 csv로 직접 내 보낸 다음 내 보낸 것으로 표시 할 수있는 독립형 기능을 개발할 때 기본적으로 0으로 설정하는 데는 여러 가지 이유가 있습니다. 다른 경우에는 pk 필터가없는 전역 업데이트로 인해 성가시다. 실제 유용한 기능보다 멍청한 보호 기능으로 보입니다.
JoelBonetR

454

UPDATE 명령을 실행하기 전에 다음 단계를 따르십시오 . MySQL Workbench에서

  1. Edit->로 이동Preferences
  2. "SQL Editor"탭과 uncheck"안전 업데이트"를 클릭 하십시오check box
  3. Query-> Reconnect to Server // 로그 아웃 한 후 로그인
  4. 이제 SQL 쿼리를 실행하십시오.

ps, MySQL 데몬을 다시 시작할 필요가 없습니다!


20
버전 6.3의 경우 2 단계 "Sql Editor"대신 2 단계를 수행 "Sql Queries"한 다음 하단에 확인란이 있습니다."Safe Updates"
meconroy

1
한 번만하면주의를 기울이지 않으면 데이터를 쉽게 정리할 수 있으므로 다시 켜는 것이 좋습니다.
Frankenmint

2
고마워 conroy. 한동안 나는 그 상자를 볼 수 없었다. 방금 창을 확대해야했습니다.
arn-arn

어쩌면 그들은 움직 였지만 MySQL Workbench 6.0에서는 "SQL Editor"가 아닌 "SQL Queries"아래에 있습니다.
MPelletier

1
예, 여기도 똑같이 보았습니다.
Elon Zito

167
SET SQL_SAFE_UPDATES=0;
UPDATE tablename SET columnname=1;
SET SQL_SAFE_UPDATES=1;

4
불행히도 다른 쿼리 기반 솔루션은 효과가 없었습니다. 그러나 이것은했다! 안전한 업데이트를 다시 설정하기 위해 줄을 추가해 주셔서 감사합니다.
SherylHohman 10

1
나는 여전히 가장 안전하면서도 가장 안전하기 때문에 이것을 좋아합니다.
Nae

117

SQL_SAFE_UPDATES를 0으로 설정할 필요가 없으므로 실제로 그렇게하지 않는 것이 좋습니다. SAFE_UPDATES는 기본적으로 REASON에 대해 설정되어 있습니다. 내가 의미하는 바를 알고 있다면 안전 벨트와 다른 것들없이 자동차를 운전할 수 있습니다.

UPDATE customers SET countryCode = 'USA'
    WHERE country = 'USA';               -- which gives the error, you just write:

UPDATE customers SET countryCode = 'USA'
    WHERE (country = 'USA' AND customerNumber <> 0); -- Because customerNumber is a primary key you got no error 1175 any more.

이제 예상 한대로 모든 레코드가 (항상) 업데이트됩니다.


3
이것은 천재입니다!
Amos Long

감사 답변 : +1
Asif Raza

2
하하, 그것은 좋은 속임수입니다. 나는 WHERE id > 0이 라인을 따라 트릭으로 사용 했습니다.
Csaba Toth

그것은 나를 위해 작동하지 않습니다, 그것은 나에게 동일한 메시지를 계속 보여줍니다. 해결 :-편집-> 환경 설정-> SQL 편집기로 안전 업데이트 모드를 비활성화하여 안전 업데이트를 선택 취소하십시오.
Abdelhadi Lahlou

2
그러나 이것이 실제로 어떻게 더 안전합니까?
Matt Messersmith

107

필요한 것은 다음과 같습니다. 새 쿼리를 시작하고 다음을 실행하십시오.

SET SQL_SAFE_UPDATES = 0;

그런 다음 : 이전에 작동하지 않은 쿼리를 실행하십시오.


7
SO에 오신 것을 환영합니다. 둘러보기 페이지도움말 페이지를 반드시 읽으 십시오.이 답변 아래에있는 많은 답변이 동일한 내용을 말하고 몇 달 전에 게시되었으므로 이와 같은 답변을 게시하지 마십시오
WOUNDEDStevenJones

1
쿼리를 실행 한 후이 옵션을 다시 활성화 할 수도 있습니다.
kta

이 답변은 무엇을 추가합니까? 2 년이 지난 후, Habibillah와 같은 내용을 게시했습니다. 업장을 얻으려고?
Luc


66

오류 코드 : 1175. 안전 업데이트 모드를 사용하고 있으며 키 열을 사용하는 WHERE없이 테이블을 업데이트하려고했습니다. 안전 모드를 비활성화하려면 기본 설정-> SQL 편집기에서 옵션을 전환하고 다시 연결하십시오.

"안전 업데이트 모드"임시 끄기

SET SQL_SAFE_UPDATES = 0;
UPDATE options SET title= 'kiemvieclam24h' WHERE url = 'http://kiemvieclam24h.net';
SET SQL_SAFE_UPDATES = 1;

"안전 업데이트 모드"를 영원히 끄십시오

MySQL 워크 벤치 8.0 :

MySQL Workbench => [ Edit ] => [ Preferences ] -> [ SQL Editor ] -> Uncheck "Safe Updates"

여기에 이미지 설명을 입력하십시오 이전 버전은 다음을 수행 할 수 있습니다.

MySQL Workbench => [Edit] => [Preferences] => [SQL Queries]

41
  1. 환경 설정 ...
  2. "안전한 업데이트"...
  3. 서버 재시작

환경 설정 ...

안전 업데이트 서버 재시작


이것은되지 않았 음을 유감이다 .IT 허용 대답 했어야
ErrorrrDetector

1
서버를 다시 시작할 필요는 없습니다. 연결을 간단히 닫았다가 다시 열면 충분합니다.
Marc L.

1
MAC에서 환경 설정은 MySQLWorkbench 최상위 메뉴 아래에 있습니다.
zwitterion

36
SET SQL_SAFE_UPDATES=0;

또는

이동 Edit --> Preferences

SQL Queries탭을 클릭 하고 확인란의 선택을 취소 Safe Updates 하십시오

Query --> Reconnect to Server

이제 SQL 쿼리를 실행하십시오.



20

WorkBench에서 안전 업데이트 모드를 비활성화하여 해결했습니다.

-편집-> 환경 설정-> SQL 편집기를 선택한 다음 안전 업데이트를 선택 취소하십시오.


7
이것은 작동하지만 MySQL Workbench를 다시 시작해야했습니다.
Lanil Marasinghe

17

답을 찾았습니다. 문제는 테이블 이름 앞에 스키마 이름을 붙여야한다는 것입니다. 즉, 명령은 다음과 같아야합니다.

UPDATE schemaname.tablename SET columnname=1;

모두 감사합니다.


5
왼쪽 패널에서 스키마를 선택하여 스키마 이름을 언급하지 않아도됩니다. 당신이 선택한 스키마 / 데이터베이스를 사용하는 왼쪽 패널 수단에서 스키마를 선택
리폰 알 Wasim

10
이것은 질문 (및 제목)에 설명 된 문제를 해결하기위한 대답이 아닙니다. 다른 것을 허용 된 것으로 표시해야합니다.
T30

나는, 업데이트 스키마 명하지만 점점 같은 오류와 함께 시도 qms-active-db= '1660_207100000001000을'.gh_table 세트 북마크
Code_Mode

3
이것은 답이 아닙니다!
에스겔 빅터

1
정답은 정답입니다. Habibillah (아래)
s

14

MySQL Workbech 버전 6.2에서는 기본 설정 SQLQueries옵션을 종료하지 않습니다 .

이 경우 가능한 사용 : SET SQL_SAFE_UPDATES=0;


1
존재하지만 옵션은 "SQL 편집기"에 있습니다.
Philip Olson

이 옵션이 보이지 않습니다. 스크린 샷을 얻을 수 있습니다. 감사합니다
ferdiado

환경 설정-> SQL 편집기 탭-> 맨 아래를여십시오. 6.2- 베타 릴리스에는이 옵션이 없었으므로 6.2.3+로 업그레이드해야합니다.
Philip Olson

내 버전은 6.3입니다
.--

12

가장 간단한 해결책은 행 제한을 정의하고 실행하는 것입니다. 이것은 안전을 위해 수행됩니다.


2
이 솔루션에서 +1 열 = 'xyz'한도 인 9999999999 인 TABLE에서 삭제
FlyingZebra1

2
이 답변은 가장 안전하지 않은 방법이므로 허용되는 답변이어야합니다.
Julian

7

질문에 대한 답변이 있었고 안전한 업데이트와는 아무런 관련이 없으므로 잘못된 위치 일 수 있습니다. 정보를 추가하기 위해 게시하겠습니다.

나는 좋은 시민이 되려고 노력했고 업데이트 될 임시 테이블을 사용하도록 쿼리를 수정했습니다.

create temporary table ids ( id int )
    select id from prime_table where condition = true;
update prime_table set field1 = '' where id in (select id from ids);

실패. 다음과 같이 업데이트를 수정했습니다.

update prime_table set field1 = '' where id <> 0 and id in (select id from ids);

효과가있었습니다. 글로리-안전한 업데이트 확인을 위해 키 <> 0을 항상 추가하거나 심지어 SQL_SAFE_UPDATE = 0을 설정하면 쿼리에서 '확인'을 잃어 버렸습니다. 옵션을 영구적으로 해제 할 수도 있습니다. 나는 그것이 하나가 아닌 2 단계 프로세스를 삭제하고 업데이트한다고 가정합니다. 그러나 충분히 빨리 입력하고 키가 특별하지만 귀찮은 것으로 생각하지 않으면 ..


4

사실, 이것은 대부분의 예에서 무의미합니다. 그러나 마침내 다음 진술에 도달했으며 정상적으로 작동합니다.

update tablename  set column1 = '' where tablename .id = (select id from tablename2 where tablename2.column2 = 'xyz');

3

이것은 Mac 용이지만 기본 설정 위치를 제외한 다른 OS의 경우 동일해야합니다.

안전하지 않은 DELETE작업을 시도 할 때 발생하는 오류

이 오류가 발생하면 환경 설정을 클릭하십시오

새 창에서 옵션을 선택 취소하십시오 Safe updates

안전 업데이트 확인

그런 다음 연결을 닫았다가 다시여십시오. 서비스를 다시 시작할 필요가 없습니다.

이제 DELETE성공적인 결과로 다시 시도 할 것 입니다.

여기에 이미지 설명을 입력하십시오

이 안전한 업데이트에 대한 모든 것이 무엇입니까? 악한 것이 아닙니다. 이것이 MySql이 말하는 것입니다.

--safe-updates옵션 사용

초보자에게는 유용한 시작 옵션이 있습니다 --safe-updates(또는 --i-am-a-dummy같은 효과가 있습니다). DELETE FROM tbl_name명세서를 발행 했지만 WHERE조항을 잊어 버린 경우에 도움이됩니다 . 일반적으로 이러한 명령문은 테이블에서 모든 행을 삭제합니다. 를 사용하면 --safe-updates행을 식별하는 키 값을 지정해야만 행을 삭제할 수 있습니다. 사고를 예방하는 데 도움이됩니다.

--safe-updates옵션 을 사용하면 mysql이 MySQL 서버에 연결할 때 다음 명령문을 발행합니다.

SET sql_safe_updates=1, sql_select_limit=1000, sql_max_join_size=1000000;

프로덕션 데이터베이스를 처리하는 동안이 옵션을 설정하는 것이 안전합니다. 그렇지 않으면 중요한 데이터를 실수로 삭제하지 않도록주의해야합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.