MySQL-Fehlercode: 1175 während UPDATE in MySQL Workbench

817

Ich versuche, die Spalte so zu aktualisieren visited, dass sie den Wert 1 erhält. Ich verwende die MySQL-Workbench und schreibe die Anweisung im SQL-Editor aus der Workbench heraus. Ich schreibe den folgenden Befehl:

UPDATE tablename SET columnname=1;

Es gibt mir den folgenden Fehler:

Sie verwenden den sicheren Aktualisierungsmodus und haben versucht, eine Tabelle ohne WHERE zu aktualisieren, das eine KEY-Spalte verwendet. Um den abgesicherten Modus zu deaktivieren, schalten Sie die Option um.

Ich habe die Anweisungen befolgt und dann die safe updateOption aus dem EditMenü Preferencesdeaktiviert SQL Editor. Der gleiche Fehler wird weiterhin angezeigt und ich kann diesen Wert nicht aktualisieren. Bitte sag mir, was los ist.

Jury A.
quelle
4
Ist Ihnen bewusst, dass dadurch alle Zeilen in Ihrer Tabelle aktualisiert werden, in denen "besucht" = 0 ist, um "besucht" = 1 zu werden? Ist das was du willst?
Mark Byers
23
Nachdem Sie "Sichere Updates" deaktiviert haben, gehen Sie wie folgt vor: Abfrage -> Verbindung zum Server wiederherstellen.
Ripon Al Wasim
5
Sie müssen erneut eine Verbindung zu MySQL Server herstellen (MySQL-Verbindung neu starten), bevor diese Änderung wirksam wird.
Philip Olson

Antworten:

1613

Es sieht so aus, als ob für Ihre MySQL-Sitzung die Option für sichere Updates festgelegt ist. Dies bedeutet, dass Sie Datensätze nicht aktualisieren oder löschen können, ohne einen Schlüssel (z. B. primary key) in der where-Klausel anzugeben .

Versuchen:

SET SQL_SAFE_UPDATES = 0;

Oder Sie können Ihre Abfrage so ändern, dass sie der Regel folgt (Verwendung primary keyin where clause).

Habibillah
quelle
Ich erwähnte, dass ich die Option für sichere Aktualisierungen über die GUI bereits deaktiviert habe, die den gleichen Effekt haben wie die ID, mit der ich den Befehl eingegeben habe. Vielen Dank für Ihre Antwort, aber ich habe meine Frage bereits beantwortet. Überprüfen Sie meine Antwort, um zu wissen, was das Problem war.
Jury A
8
Sobald Sie die Option in der GUI geändert haben, müssen Sie erneut eine Verbindung zur Datenbank herstellen, damit die Einstellung ordnungsgemäß festgelegt wird.
Tim Koscielski
31
Stellen Sie sicher, SET SQL_SAFE_UPDATES = 1dass Sie dies zurücksetzen, wenn Sie fertig sind, da dies eine lohnende Sicherheitsfunktion ist.
StockB
4
Ich bin mit StockB nicht einverstanden ... Vielleicht möchten Sie es beibehalten, während Sie SQL besser beherrschen ... aber sobald Sie wissen, was Sie tun ... ist dieses Ding völlig nutzlos. Sie sollten Ihre Sachen sowieso nicht auf einem Produktionsserver entwickeln. Selbst wenn Sie es vermasseln, sollten Sie nur Ihren Entwicklungsserver kaputt machen, worüber sich sowieso niemand Gedanken macht.
Mathieu Turcotte
3
Ich bin nur gekommen, um zu sagen, dass ich in den letzten 6 Monaten etwa 20 Mal nach diesem Beitrag gesucht habe, da ich seit 11 Jahren immer die Option hatte, falsch zu schreiben, aber jetzt arbeite ich an einem Unternehmen, dessen Entwicklung und Produktion wahr sind. Es gibt viele Gründe, die Standardeinstellung auf 0 zu setzen, z. B. wenn Sie eigenständige Funktionen entwickeln, die Sie möglicherweise direkt in csv exportieren und dann als exportiert oder ähnlich markieren möchten. In anderen Fällen ist es ärgerlich aufgrund globaler Updates, die offensichtlich keinen pk-Filter haben. Ich sehe es eher als Noob-Schutz als als eine wirklich nützliche Funktion.
JoelBonetR
454

Führen Sie die folgenden Schritte aus, bevor Sie den Befehl UPDATE ausführen: In MySQL Workbench

  1. Gehe zu Edit->Preferences
  2. Klicken Sie auf die "SQL Editor"Registerkarte und auf uncheck"Sichere Updates".check box
  3. Query-> Reconnect to Server // abmelden und dann anmelden
  4. Führen Sie nun Ihre SQL-Abfrage aus

ps, der MySQL-Daemon muss nicht neu gestartet werden!

Ripon Al Wasim
quelle
20
Für Version 6.3 sollte Schritt 2 "Sql Editor"anstelle von sein "Sql Queries"und dann gibt es unten ein Kontrollkästchen für"Safe Updates"
meconroy
1
Wenn es eine einmalige Sache ist, schlage ich vor, dass Sie sie wieder einschalten, da dies es sehr einfach macht, Ihre Daten auf königliche Weise zu vermasseln, wenn Sie nicht vorsichtig sind
Frankenmint
2
danke conroy. Für eine Weile konnte ich diese Box nicht sehen. Ich musste nur das Fenster vergrößern.
Arn-Arn
Vielleicht haben sie es verschoben, aber in MySQL Workbench 6.0 ist es unter "SQL Queries", nicht unter "SQL Editor"
MPelletier
1
ja das gleiche hier, musste ein wenig nach unten scrollen, um es zu sehen.
Elon Zito
167
SET SQL_SAFE_UPDATES=0;
UPDATE tablename SET columnname=1;
SET SQL_SAFE_UPDATES=1;
user2531028
quelle
4
Leider haben die anderen abfragebasierten Lösungen bei mir nicht funktioniert. Aber dieser hat es getan! Ich freue mich, dass Sie eine Zeile hinzugefügt haben, um sichere Updates wieder zu aktivieren.
SherylHohman
1
Ich mag dieses hier wirklich, da es wahrscheinlich das allgemeinste von allen ist und trotzdem in Sicherheit ist.
Nae
117

Sie müssen SQL_SAFE_UPDATES nicht auf 0 setzen , ich würde wirklich davon abraten , dies so zu tun. SAFE_UPDATES ist aus GRÜNDEN standardmäßig aktiviert. Sie können ein Auto ohne Sicherheitsgurte und andere Dinge fahren, wenn Sie wissen, was ich meine;) Fügen Sie einfach in die WHERE-Klausel einen KEY-Wert ein, der mit allem übereinstimmt, wie ein Primärschlüssel im Vergleich zu 0, also anstatt zu schreiben:

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.

Jetzt können Sie sicher sein, dass jeder Datensatz (IMMER) wie erwartet aktualisiert wird.

Rudy De Volder
quelle
3
Das ist Genie!
Amos Long
geschätzte Antwort: +1
Asif Raza
2
Haha, das ist ein guter Trick. Ich habe WHERE id > 0als Trick in dieser Richtung verwendet.
Csaba Toth
Es funktioniert bei mir nicht, es zeigt mir weiterhin dieselbe Nachricht. Ich habe es behoben, indem ich den sicheren Aktualisierungsmodus deaktiviert habe, indem ich: - Bearbeiten -> Einstellungen -> SQL-Editor und dann das sichere Update deaktiviere.
Abdelhadi Lahlou
2
Wie macht es das eigentlich sicherer?
Matt Messersmith
107

Sie benötigen lediglich: Starten Sie eine neue Abfrage und führen Sie Folgendes aus:

SET SQL_SAFE_UPDATES = 0;

Dann: Führen Sie die Abfrage aus, die Sie ausführen wollten und die zuvor nicht funktionierte.

Quagmire12
quelle
7
Willkommen bei SO, müssen Sie die lesen Tour Seite und Hilfeseite und vermeiden Entsendung Antworten wie diese , weil viele Antworten unterhalb dieser hier genau dasselbe sagen und haben vor geschrieben Monaten wurden
WOUNDEDStevenJones
1
Sie können diese Option auch nach dem Ausführen der Abfrage wieder aktivieren.
kta
Was fügt diese Antwort hinzu? Sie haben gerade mehr als zwei Jahre später dasselbe wie Habibillah gepostet. Versuchen Sie, Karma zu ernten?
Luc
71

SET SQL_SAFE_UPDATES = 0;

Ihr Code SQL hier

SET SQL_SAFE_UPDATES = 1;

Carlos Henrique Moreira Dos S.
quelle
66

Fehlercode: 1175. Sie verwenden den sicheren Aktualisierungsmodus und haben versucht, eine Tabelle ohne WHERE zu aktualisieren, die eine KEY-Spalte verwendet. Um den abgesicherten Modus zu deaktivieren, schalten Sie die Option unter Einstellungen -> SQL Editor um und stellen Sie die Verbindung wieder her.

Schalten Sie "Safe Update Mode" vorübergehend aus

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

Schalten Sie "Safe Update Mode" für immer aus

MySQL Workbench 8.0:

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

Geben Sie hier die Bildbeschreibung ein Alte Version kann:

MySQL Workbench => [Edit] => [Preferences] => [SQL Queries]
Tính Ngô Quang
quelle
41
  1. Einstellungen ...
  2. "Sichere Updates" ...
  3. Starten Sie den Server neu

Einstellungen ...

Sichere Updates Starten Sie den Server neu

Andrew
quelle
Dies sollte die akzeptierte Antwort gewesen sein. Es ist schade, dass es nicht gewesen ist
ErrorrrDetector
1
Sie sollten den Server nicht neu starten müssen. Es sollte ausreichen, die Verbindung einfach zu schließen und wieder zu öffnen.
Marc L.
1
In MAC befinden sich die Einstellungen im Hauptmenü von MySQLWorkbench.
Zwitterion
36
SET SQL_SAFE_UPDATES=0;

ODER

Gehe zu Edit --> Preferences

Klicken Sie auf die SQL Queries Registerkarte und deaktivieren Sie das Safe Updates Kontrollkästchen

Query --> Reconnect to Server

Führen Sie nun Ihre SQL-Abfrage aus

Balu
quelle
26

Wenn Sie sich in einem abgesicherten Modus befinden, müssen Sie in der where-Klausel eine ID angeben. So etwas sollte funktionieren!

UPDATE tablename SET columnname=1 where id>0
Tomislav
quelle
1
Diese Seite bestätigt diese Tatsache: bennadel.com/blog/…
DivDiff
20

Auf WorkBench habe ich es behoben, indem ich den sicheren Aktualisierungsmodus deaktiviert habe:

-Bearbeiten -> Einstellungen -> SQL-Editor und deaktivieren Sie dann Sicheres Update.

Abdelhadi Lahlou
quelle
7
Dies funktioniert, aber ich musste MySQL Workbench neu starten.
Lanil Marasinghe
17

Ich habe die Antwort gefunden. Das Problem war, dass ich dem Tabellennamen den Schemanamen voranstellen muss. dh der Befehl sollte sein:

UPDATE schemaname.tablename SET columnname=1;

Vielen Dank an alle.

Jury A.
quelle
5
Sie können vermeiden, den Schemanamen zu erwähnen, indem Sie im linken Bereich das Schema auswählen. Wenn Sie das Schema im linken Bereich auswählen, verwenden Sie das ausgewählte Schema / die ausgewählte Datenbank
Ripon Al Wasim
10
Dies ist nicht die Antwort, um das in der Frage (und im Titel) beschriebene Problem zu lösen. Sie sollten einen anderen als akzeptiert markieren.
T30
Ich habe versucht, mit Schemaname, aber den gleichen Fehler zu bekommen, Update qms-active-db.gh_table set bookmark = '1660_207100000001000'
Code_Mode
3
Das ist nicht die Antwort!
Hesekiel Victor
1
falsche Antwort wird richtige Antwort von Habibillah (unten) beantwortet
Hariharan s
14

In MySQL Workbech Version 6.2 wird die Voreinstellung nicht beendetSQLQueries .

In diesem Fall ist es möglich: SET SQL_SAFE_UPDATES=0;

Ferdiado
quelle
1
Es ist vorhanden, aber die Option befindet sich jetzt unter "SQL Editor".
Philip Olson
Ich sehe diese Option nicht. Bitte Sie können einen Screenshot bekommen. Danke
Ferdiado
Öffnen Sie die Einstellungen -> Registerkarte SQL-Editor -> Unten. In einer 6.2-Beta-Version fehlte diese Option. Möglicherweise müssen Sie ein Upgrade auf 6.2.3+ durchführen.
Philip Olson
Meine Version ist 6.3, es ist unter -> SQL Editor -> Andere
tyan
12

Die einfachste Lösung besteht darin, das Zeilenlimit zu definieren und auszuführen. Dies geschieht aus Sicherheitsgründen.

Ruwantha
quelle
2
+1 auf diese Lösung. Löschen Sie aus TABELLE, wobei Spalte = 'xyz' Limit 9999999999
FlyingZebra1
2
Diese Antwort sollte die akzeptierte Antwort sein, da dies der am wenigsten unsichere Weg ist.
Julian
7

Da die Frage beantwortet wurde und nichts mit sicheren Updates zu tun hat, ist dies möglicherweise der falsche Ort. Ich werde nur posten, um Informationen hinzuzufügen.

Ich habe versucht, ein guter Bürger zu sein, und die Abfrage so geändert, dass eine temporäre Tabelle mit IDs verwendet wird, die aktualisiert werden:

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);

Fehler. Das Update wurde geändert in:

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

Das hat funktioniert. Nun gut - wenn ich immer den Schlüssel <> 0 hinzufüge, um die sichere Aktualisierungsprüfung zu umgehen, oder sogar SQL_SAFE_UPDATE = 0 setze, habe ich die Prüfung in meiner Abfrage verloren. Ich könnte die Option genauso gut dauerhaft deaktivieren. Ich nehme an, es löscht und aktualisiert einen zweistufigen Prozess anstelle von einem. Wenn Sie jedoch schnell genug tippen und nicht mehr daran denken, dass der Schlüssel etwas Besonderes ist, sondern nur ein Ärgernis.

Gerard ONeill
quelle
4

Dies ist zwar für die meisten Beispiele sinnlos. Aber schließlich bin ich zu folgender Aussage gekommen und es funktioniert gut:

update tablename  set column1 = '' where tablename .id = (select id from tablename2 where tablename2.column2 = 'xyz');
Sonic-Mayhem
quelle
3

Dies gilt für Mac, muss jedoch für andere Betriebssysteme mit Ausnahme des Speicherorts der Einstellungen identisch sein.

Der Fehler, den wir erhalten, wenn wir einen unsicheren DELETEVorgang versuchen

Klicken Sie auf Einstellungen, wenn Sie diesen Fehler erhalten

Deaktivieren Sie im neuen Fenster die Option Safe updates

Deaktivieren Sie die sicheren Updates

Schließen Sie dann die Verbindung und öffnen Sie sie erneut. Der Dienst muss nicht neu gestartet werden.

Jetzt werden wir es DELETEmit erfolgreichen Ergebnissen erneut versuchen .

Geben Sie hier die Bildbeschreibung ein

Worum geht es also bei diesen sicheren Updates? Es ist keine böse Sache. Dies ist, was MySql darüber sagt.

Verwenden der --safe-updatesOption

Für Anfänger ist eine nützliche Startoption --safe-updates(oder --i-am-a-dummy, die den gleichen Effekt hat). Dies ist hilfreich, wenn Sie möglicherweise eine DELETE FROM tbl_nameErklärung abgegeben, die WHEREKlausel jedoch vergessen haben . Normalerweise löscht eine solche Anweisung alle Zeilen aus der Tabelle. Mit--safe-updates können Sie Zeilen nur löschen, indem Sie die Schlüsselwerte angeben, die sie identifizieren. Dies hilft, Unfälle zu vermeiden.

Wenn Sie die --safe-updatesOption verwenden, gibt mysql die folgende Anweisung aus, wenn eine Verbindung zum MySQL-Server hergestellt wird:

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

Es ist sicher, diese Option zu aktivieren, während Sie mit der Produktionsdatenbank arbeiten. Andernfalls müssen Sie sehr vorsichtig sein, um wichtige Daten nicht versehentlich zu löschen.

Krishnadas PC
quelle