Vorwort Im Falle eines Anwendungsfehlers oder einer Fehlbedienung des DBA kann die gesamte Tabelle aktualisiert werden: Update/Löschen. MySQL bietet sql_safe_updates, um diesen Vorgang einzuschränken. setze sql_safe_updates = 1; Nach dem Festlegen wird die SQL-Ausführung ohne Where-Bedingungen beim Aktualisieren und Löschen eingeschränkt, was strenger ist. Dies wird sich negativ auf die bestehende Online-Umgebung auswirken. Durch strenge Prüfungen neuer Systeme und Anwendungen kann sichergestellt werden, dass keine vollständigen Tabellenaktualisierungen erfolgen. Tabelle erstellen: working.test01 (ID INT NICHT NULL AUTO_INCREMENT, NAME VARCHAR (20), Alter INT, gmt_created DATETIME, PRIMARY KEY (ID)); einfügen in test01(Name, Alter, gmt_created) Werte('xiaowang', 2, jetzt()); einfügen in test01(Name, Alter, gmt_created) Werte('huahua', 5, jetzt()); einfügen in test01(Name, Alter, gmt_created) Werte('gougou', 9, jetzt()); einfügen in test01(Name, Alter, gmt_created) Werte('heihei', 12, jetzt()); einfügen in test01(Name, Alter, gmt_created) Werte('baibai', 134, jetzt()); # Kein Index-Update im Filterfeld Aktualisiere Test01, setze Name = „xiaoxiao“, wobei Alter = 2; FEHLER 1175 (HY000): Sie verwenden den abgesicherten Aktualisierungsmodus und haben versucht, eine Tabelle ohne WHERE zu aktualisieren, die eine KEY-Spalte verwendet # Aktualisieren Sie die gesamte Tabelle. Update Test01. Setname = „xiaoxiao“; FEHLER 1175 (HY000): Sie verwenden den abgesicherten Aktualisierungsmodus und haben versucht, eine Tabelle ohne WHERE zu aktualisieren, die eine KEY-Spalte verwendet # Limit-Update hinzufügen, Update test01, Name festlegen = „xia“, Limit 1; Abfrage OK, 1 Zeile betroffen (0,00 Sek.) Übereinstimmende Zeilen: 1 Geändert: 1 Warnungen: 0 # Einen neuen Index erstellen create index idx_age on test01(age); Aktualisiere Test01, setze Namen = „xiaoxiao“, wobei Alter = 2; Abfrage OK, 1 Zeile betroffen (0,01 Sek.) Übereinstimmende Zeilen: 1 Geändert: 1 Warnungen: 0 Update Test01, Name festlegen = „hhh“, wobei Alter = 9, Limit 10; Abfrage OK, 1 Zeile betroffen (0,00 Sek.) Übereinstimmende Zeilen: 1 Geändert: 1 Warnungen: 0 Tabelle test01 ändern, Index idx_age löschen; Erstelle den Index idx_age_name für test01(Alter, Name); Aktualisiere Test01, setze Alter = 100, wobei Name = „hhh“; FEHLER 1175 (HY000): Sie verwenden den abgesicherten Aktualisierungsmodus und haben versucht, eine Tabelle ohne WHERE zu aktualisieren, die eine KEY-Spalte verwendet Aktualisiere Test01, setze Alter = 100, wobei Name = „hhh“, Limit 10; Abfrage OK, 1 Zeile betroffen (0,00 Sek.) Übereinstimmende Zeilen: 1 Geändert: 1 Warnungen: 0 Wenn beim Aktualisieren keine Where-Bedingung vorhanden ist oder die Where-Bedingung kein Indexfeld ist, muss daher limit verwendet werden; wenn eine Where-Bedingung vorhanden ist, muss das Indexfeld Kürzlich habe ich bei der Arbeit ein weiteres Problem festgestellt. MySQL sql_safe_updates unterstützt keine Unterabfrage-Updates. Da Entwickler Daten manchmal versehentlich aktualisieren, müssen die MySQL-Instanzen der Online-Datenbank sql_safe_updates=1 festlegen, um Aktualisierungen und Löschungen ohne Indizes zu vermeiden. Als Ergebnis stellte der Entwickler eines Tages fest, dass das folgende SQL nicht korrekt ausgeführt werden konnte: Aktualisiere t1, setze col2=1, wobei key1 in (wähle col2 aus t2, wobei key2='ABcD'); Der Fehler lautet wie folgt: FEHLER 1175 (HY000): Sie verwenden den abgesicherten Aktualisierungsmodus und haben versucht, eine Tabelle ohne WHERE zu aktualisieren, die eine KEY-Spalte verwendet Mit anderen Worten: Es ist nicht möglich, die Where-Bedingung zu aktualisieren, wenn sie nicht indiziert ist. Nach einiger Suche stellte ich fest, dass dies tatsächlich nicht möglich ist. Auch wenn key1 und key2 die Indizes von t1 bzw. t2 sind, [kann ich sie nicht in Primärschlüssel ändern]. Beschreibung: Unterabfrage-Updates werden nicht unterstützt. Ich habe gegoogelt und herausgefunden, dass jemand anderes diese Frage schon einmal gestellt hat. . http://stackoverflow.com/questions/24314830/query-not-getting-executed-if-supplied-a-nested-sub-query Endgültige Lösung: 1) Ändern Sie die Parameter auf Sitzungsebene: 2) Programmverarbeitung: Zusammenfassen Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Lernwert für Ihr Studium oder Ihre Arbeit hat. Wenn Sie Fragen haben, können Sie eine Nachricht hinterlassen. Vielen Dank für Ihre Unterstützung von 123WORDPRESS.COM. Das könnte Sie auch interessieren:
|
<<: So implementieren Sie das Strategiemuster in Javascript
>>: Eine vollständige Anleitung zur Konfiguration von Linux-Umgebungsvariablen
Wie kann festgestellt werden, ob das aktuelle Lin...
Karten-Tags müssen paarweise vorkommen, d. h. <...
Grafisches Tutorial zur Installation und Konfigur...
Inhaltsverzeichnis Szenario Code-Implementierung ...
Sicht: Wenn eine temporäre Tabelle wiederholt ver...
Browserkompatibilität ist nichts anderes als Stil...
Inhaltsverzeichnis 1. Nginx implementiert das Las...
Die folgenden Fragen basieren alle auf der InnoDB...
Seitendomänenbeziehung: Die Hauptseite a.html gehö...
1. Was ist ein Servlet 1.1. Erklären Sie in offiz...
1. Der Tomcat-Dienst ist nicht geöffnet Geben Sie...
Detaillierte Erklärung und Beispiele zur Passwort...
1|0MySQL (MariaDB) 1|11. Beschreibung Das Datenba...
Inhaltsverzeichnis 1. Wo ist die Langsamkeit? 2. ...
Bildung des Gittersystems Im Jahr 1692 war der fr...