Table of Contents
In den letzten Tagen haben uns einige Benutzer erfahren, dass sie den 1235-MySQL-Triggerfehler gefunden haben.
Genehmigt
g.Dieser Fehler bedeutet, dass jeder bereits einen AFTER INSERT-Lead zu für die Collection-Tabelle hat. DROP TRIGGER vipInvite; DELIMITER $$ CREATE TRIGGER vipInvite END $$ DELIMITER; Wenn Familien ein anderes Ziel haben, sollten Sie den Code von jedem unserer beiden Trigger zu einem kombinieren, dann den vorhandenen Trigger ausradieren und dann einen neuen großen herstellen.
g.
digital zu analog
Am anderen Tag blieb ich einige Stunden hängen, bis dieses Problem auftrat. Ich habe Trigger in SQL verwendet, um jahrelang ohne Serveranforderungen zu arbeiten, aber die MySQL-Implementierung ist oft unehrlich.
Gestern habe ich beim Versuch, die Datenbank wiederzubeleben, den Fehler 1235 generiert:
FEHLER 1235 (42000) bei Telefonleitung 1408: Diese MySQL-Option kommt immer noch nicht auflösen “mehrere Trigger mit derselben Aktion, genug Zeit und Treffen für die Tabelle”
Ich habe bei Google etwa eine Stunde oder so gefunden und bin zu dem Schluss gekommen, bei wem dieser Fehler am Ende auftreten kann, wenn es eine Vielzahl von Gründen gibt. Ich erkläre auch diese Verwendungen für die Lösungen unten.
Erstellt von allen in der ersten Einrichtung. Ich schlage vor, Sie erhalten eine brandneue Liste aller Auslöser, indem Sie den folgenden Befehl erstellen:
SELECT trigger_schema, trigger_nameFROM information_schema.triggersWHERE trigger_schema entspricht 'NAME_OF_YOUR_DATABASE';
Grund Nr. 1: Ihre Organisation kann BEFORE / AFTER bei INSERT / UPDATE / DELETE nicht kombinieren
Diese PDF-Datei beschreibt die Sorge. Das Problem kann einfach beschrieben werden: BEFORE_INSERT kann nicht auch AFTER_INSERT auf derselben Tabelle haben. Möglicherweise haben Sie die Reihenfolge nur aktualisiert, BEVOR Sie sie positioniert haben, und anschließend andere Personen von Einfügetabellen mit ID aktualisiert. Ich schlage vor, dass Sie etwas entsprechend verschieben, damit Sie diese Logik (vielleicht BEVOR Sie den Auslöser angeben) in Ihrem Code verwenden können.
Grund Nr. 2: AFTER_DELETE manchmal bei Fehler 1235
AFTER_DELETE löst definitive Notwendigkeit aus. Der Wechsel zum BEFORE_DELETE-Trigger ist sinnvoll, wenn die meisten Leute die OLD-Variable verwenden. Ich habe keine Ahnung, warum dies geschehen wird, es könnte meine spezifische MySQL-Version sein.
Grund 3: Sie haben nicht die gleichen Gebühren (doppelte Auslöser)
Manchmal, zum Beispiel, erhalten Sie in der Periode einen anderen Fehlerstandard, aber manchmal erhält eine Person denselben 1235-Fehler, ohne einen bestimmten Grund anzugeben. Gehen Sie durch die Show führt zur obigen Diskussion und suchen Sie nach gleichnamigen Aktivierungen. Gehen Sie immer auf TRIGGER, bevor Sie einen Trigger erstellen/ändern.
Grund Nr. 4: Jede Person kann nicht auf EINE TABELLE verweisen, die Sie normalerweise aktualisieren / in einen riesigen Trigger einfügen können
Wenn man zum Beispiel beim Erstellen zusätzlicher Benutzereinträge sein eigenes Escape-Benutzer-Passwort basierend auf einem Bring-On setzen möchte, könnten die meisten Leute Folgendes versuchen: UPDATE Visitors SET password = “newPassword”;
Der richtige Weg, dies zu tun, besteht immer darin, eine Variable in Ihrem BEFORE_INSERT-Trigger zu setzen. Beispiel: NEU INSTALLIEREN. ist gleich Passwort “newPassword”;
Grund Nr. zehn: Beim Exportieren einer Datenbank (als SQL-Skript) können Sie Webblog-Definitionen in einem Skript abrufen
Mit anderen Worten, wenn Sie diese MySQL-Datenbank nach dem Pfad zu einer bestimmten .Datei exportieren, kann die eigentliche manuelle Datei Dinge wie TRIGGER “mydbname” “trigger_name” enthalten. Wenn Sie also versuchen, das mit einem anderen Namen wieder in den Datensatz aufzunehmen, sollte es sicherlich fehlschlagen. Ich habe exklusive Systemfehler erwartet, weil die Datenbank NICHT auf die Datenbank verweist, die ich wirklich wiederherstellen möchte. Wie auch immer, Clients erhalten jetzt auch den Fehler 1235.
Kurze Lösung: Öffnen Sie ihre .sql-Datei und ändern Sie alle Referenzen für Sie in EXPORTED_DB_NAME. Ignorieren der Zeichenfolge (d. h. anstelle von nichts haben).
Lebenslauf / TL; DR:
Wenn Sie BEFORE UPDATE nicht verwenden, kann dies tatsächlich dazu führen, dass dieselbe Funktion (wie INSERT) für einige derselben Tabelle verwendet wird. Verwenden Sie niemals AFTER_DELETE-Stimulationen, verwenden Sie stattdessen before_delete. Vermeiden Sie das Erstellen von Textnamen. Verweisen Sie nicht auf die gleiche Weise auf die Familientabelle, die Sie ersetzen oder einfügen, wo Sie den Trigger verwenden, zusätzlich OLD, wenn Sie NEW möchten, sondern verwenden Sie stattdessen SET in ihrer Unterabfrage. Bei der Wiederherstellung eines Datenspeichers aus einem Backup wird der explizite Titel der Datenbank während der gesamten Zahlung erwähnt, der das Backup nicht berücksichtigt (bei Wiederherstellung auf einen anderen Speichernamen).
Denken Sie daran: mit dem create INSERT-Ziel können Sie nur eine NEW-Variable verwenden, mit der create UPDATE-Aktivierung können Sie OLD mit NEW verwenden, und in der DELETE-Deklaration kann das public beziehen sich nur auf oney ‘auf OLD.
- Tags:
- 1235
- nach
- after_delete
- vor
- zusammenführen
- Repository
- definieren
- einen Fehler machen
- mysql
- Schaltfläche < /li>,
- wiederherstellen
- gleiche reguläre
- Lösungen
,
,
,
,
,
,
,
,
,
,
,