Ich versuche, die Spalte visited
zu aktualisieren, um den Wert 1 zu erhalten. Ich verwende die MySQL-Workbench und schreibe die Anweisung im SQL-Editor innerhalb der Workbench. Ich schreibe den folgenden Befehl:
UPDATE tablename SET columnname=1;
Es gibt mir den folgenden Fehler:
Sie verwenden den abgesicherten Aktualisierungsmodus und haben versucht, eine Tabelle ohne ein WHERE zu aktualisieren, das eine KEY-Spalte verwendet. Um den abgesicherten Modus zu deaktivieren, aktivieren Sie die Option ....
Ich befolgte die Anweisungen und deaktivierte die Option safe update
im Menü Edit
, dann Preferences
und dann SQL Editor
. Der gleiche Fehler tritt immer noch auf und ich kann diesen Wert nicht aktualisieren. Bitte, sag mir, was ist los?
Ich habe die Antwort gefunden. Das Problem war, dass ich dem Tabellennamen den Schemanamen voranstellen musste. der Befehl sollte sein:
UPDATE schemaname.tablename SET columnname=1;
Vielen Dank an alle.
Es sieht so aus, als ob in Ihrer MySQL-Sitzung Option für sichere Updates gesetzt 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 (verwenden Sie primary key
in where clause
).
Befolgen Sie die folgenden Schritte, bevor Sie den Befehl UPDATE ausführen: In MySQL Workbench
Edit
-> Preferences
"SQL Editor"
und uncheck
"Sichere Updates" check box
Query
-> Reconnect to Server
// ausloggen und dann einloggenS., Sie müssen den MySQL-Daemon nicht neu starten!
SET SQL_SAFE_UPDATES=0;
UPDATE tablename SET columnname=1;
SET SQL_SAFE_UPDATES=1;
Alles, was benötigt wird, ist: 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 ausgeführt haben und die zuvor nicht funktioniert hat.
Keine Notwendigkeit, SQL_SAFE_UPDATES auf 0 zu setzen, ich würde wirklich davon abraten, es so zu machen. SAFE_UPDATES ist aus einem GRUND 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 wie ein Primärschlüssel mit 0 übereinstimmt, 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.
Fehlercode: 1175. Sie verwenden den abgesicherten Aktualisierungsmodus und haben versucht, eine Tabelle ohne WHERE zu aktualisieren, die eine KEY-Spalte verwendet. Um den abgesicherten Modus zu deaktivieren, aktivieren Sie die Option in den Einstellungen -> SQL Editor und stellen die Verbindung wieder her.
"Safe Update Mode" vorübergehend ausschalten
SET SQL_SAFE_UPDATES = 0;
UPDATE options SET title= 'kiemvieclam24h' WHERE url = 'http://kiemvieclam24h.net';
SET SQL_SAFE_UPDATES = 1;
"Safe Update Mode" für immer ausschalten
MySQL Workbench 8.0:
MySQL Workbench => [ Edit ] => [ Preferences ] -> [ SQL Editor ] -> Uncheck "Safe Updates"
MySQL Workbench => [Edit] => [Preferences] => [SQL Queries]
SET SQL_SAFE_UPDATES=0;
OR
Gehe zEdit --> Preferences
KlickenSQL Queries
und DeaktivierenSafe Updates
Kontrollkästchen
Query --> Reconnect to Server
Führen Sie nun Ihre SQL-Abfrage aus
Wenn Sie sich in einem abgesicherten Modus befinden, müssen Sie id in der where-Klausel angeben. So etwas sollte funktionieren!
UPDATE tablename SET columnname=1 where id>0
Auf WorkBench habe ich es gelöst, indem ich den abgesicherten Update-Modus deaktivierte:
-Edit -> Preferences -> Sql Editor dann deaktivieren Sie Safe Update.
Die einfachste Lösung besteht darin, das Zeilenlimit zu definieren und auszuführen. Dies geschieht aus Sicherheitsgründen.
Da die Frage beantwortet wurde und nichts mit sicheren Updates zu tun hatte, 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 wird:
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 folgendermaßen geändert:
update prime_table set field 1 = '' where id <> 0 and id in (select id from ids);
Das hat funktioniert. Nun gut - wenn ich immer den Where-Key <> 0 hinzufüge, um die Prüfung auf sichere Updates zu umgehen, oder sogar SQL_SAFE_UPDATE = 0 setze, dann habe ich die 'Prüfung' in meiner Abfrage verloren. Ich könnte genauso gut die Option dauerhaft deaktivieren. Ich nehme an, es macht das Löschen und Aktualisieren eines zweistufigen Prozesses anstelle eines einzigen. Aber wenn Sie schnell genug tippen und aufhören, darüber nachzudenken, dass der Schlüssel etwas Besonderes ist, sondern nur ein Ärgernis.
Das ist für die meisten Beispiele zwar sinnlos. Aber zum Schluss bin ich zu folgender Aussage gekommen und sie funktioniert einwandfrei:
update tablename set column1 = '' where tablename .id = (select id from tablename2 where tablename2.column2 = 'xyz');
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 eine unsichere DELETE
-Operation versuchen
Deaktivieren Sie im neuen Fenster die Option Safe updates
Schließen Sie dann die Verbindung und öffnen Sie sie erneut. Der Dienst muss nicht neu gestartet werden.
Jetzt werden wir DELETE
erneut mit erfolgreichen Ergebnissen versuchen.
Worum geht es also bei diesen sicheren Updates? Es ist keine böse Sache. Das sagt MySql dazu.
Verwenden der --safe-updates
-Option
Für Anfänger ist eine nützliche Startoption
--safe-updates
(oder--i-am-a-dummy
, was den gleichen Effekt hat). Dies ist hilfreich in Fällen, in denen Sie möglicherweise eineDELETE FROM tbl_name
-Anweisung ausgegeben, aber dieWHERE
-Klausel 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 Option
--safe-updates
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 nicht versehentlich wichtige Daten zu löschen.
SET SQL_SAFE_UPDATES = 0;
ihren Code SQL hier
SET SQL_SAFE_UPDATES = 1;