MySQL-Fehler in Trigger - "Unbekannte Spalte in der 'NEUEN'"
Bin ich mit einem inkonsistenten Fehler mit einer "before-insert-trigger" in MySQL und kann nicht herausfinden, der Grund.
Ich Habe eine Tabelle mit der folgenden Beschreibung:
+-----------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+---------------+------+-----+---------+-------+
| ROW_ID | int(11) | NO | PRI | 0 | |
| ID | int(11) | NO | UNI | NULL | |
| TITLE | varchar(32) | NO | | NULL | |
| TEXT | varchar(500) | NO | | NULL | |
| URL | varchar(200) | YES | | NULL | |
| MINUTE_IN | int(11) | YES | | NULL | |
| SECOND_IN | int(11) | YES | | NULL | |
| TVSHOW_ID | int(11) | NO | MUL | NULL | |
| IMAGE | varchar(4000) | YES | | NULL | |
+-----------+---------------+------+-----+---------+-------+
Und ich habe einen Trigger mit der folgenden Anweisung:
delimiter $$
CREATE TRIGGER ACTIVATE_IRT_CONTENT BEFORE INSERT ON WEXTRAS_CONTENT
FOR EACH ROW
BEGIN
IF (SELECT s.ACTIVE
from WEXTRAS_TVSHOW s
where s.id = NEW.tvshow_id) = 1 AND NEW.MINUTE_IN = 0 AND NEW.SECOND_IN = 0
THEN SET NEW.MINUTE_IN = TIMESTAMPDIFF(MINUTE,(select INIT_TIME from WEXTRAS_TVSHOW s
where s.id = NEW.tvshow_id
),sysdate());
SET NEW.SECOND_IN = SECOND(SEC_TO_TIME(TIMESTAMPDIFF(SECOND,(select INIT_TIME from WEXTRAS_TVSHOW s
where s.id = NEW.tvshow_id
),sysdate())));
END IF;
END$$
delimiter ;
Das Problem ist, dass manchmal der folgende Fehler zurückgegeben:
Unbekannte Spalte 'MINUTE_IN' in 'NEUE'
Wenn dieser Fehler Auftritt, es wird nicht aufhören, bis ich löschen und neu erstellen der trigger mit genau der gleichen Aussage. Wenn ich das mache, der Fehler nicht Auftritt mehr und mehrere Einsätze auftreten, kein problem, bis das gleiche Problem gibt mit scheinbar ohne Grund.
Kann jemand mir mit diesem Problem helfen?
Vielen Dank im Voraus.
- warum hast du 3 zusätzliche Semikolon in IF-Bedingung? und andere Semikolons in anderen Orten auch, ich hätte gedacht es würde beschweren sich über syntax-Fehler.
- Oops...Das war eigentlich ein copy/paste Fehler beim zurücksetzen der Vergangenheit einige versuche, um zu sehen, ob das Problem würde nicht mehr auftreten. Ich bearbeitete meinen ursprünglichen post, um es zu korrigieren. Sorry...
- +1 ich würde gerne wissen, was die Antwort ist auch, wie ich denke, dann haben Sie einen sehr merkwürdigen Fehler.
- Ich konnte das problem nicht reproduzieren, der Fehler wird nicht generiert. Welche version von MySQL benutzt du? SQL Fiddle Test
- Ich bin mit 5.6.15 auf einem CentOS 64-bit-Maschine. Ich bin auch angefangen zu denken, es kann ein MySQL Fehler. Ich kann nicht immer replizieren den Fehler so gut...dieses Verhalten scheint ziemlich random...
- minute_in ist auf 'null : ja, vielleicht, wenn Sie Daten einfügen, ohne dabei einen Wert für die minute in das problem auftreten könnte, testen Sie dies ?
- Sie überprüft aber kein Glück. Dennoch ist die insert-Anweisung, wenn der Fehler Auftritt, hat Sie den Wert '0'. Gestern habe ich versucht die Einstellung, die Werte, die ich brauche, um Variablen vor der Einstellung Sie zu MINUTE_IN und SECOND_IN mit diesen Variablen und so weit, so gut... hatte Nie einen ganzen Tag ohne Fehler, also ich fand eine Abhilfe für dieses Problem. Gehen, um ein paar mehr tests durch, um sicherzustellen wenn dadurch das problem gelöst und wenn es getan hat, werde ich sicher sein, diesen Beitrag zu aktualisieren.
- Nur, um Ihnen die gute Nachricht, das problem habe gelöst indem Sie deklarieren zwei Variablen, die innerhalb der trigger und setzen Sie mit dem Ausdruck war ich mit einstellen MINUTE_IN und SECOND_IN und nach, dass die Einstellung MINUTE_IN und SECOND_IN auf diese Variablen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Da ist ein Fehler in MySQL 5.6.17 auf den Auslöser, wenn Sie verweisen auf eine andere Tabelle, die abgeschnitten wurde: http://bugs.mysql.com/bug.php?id=72446
Vielleicht ist das der Grund? Ich bin versucht, dies zu umgehen, indem Sie meinen TRUNCATE Tabellenname LÖSCHEN VON table_name (where table_name ist die Tabelle, die meine trigger geht, und packt die Daten aus. I. e.: wenn Sie einen trigger auf Eine Tabelle, die Referenzen der Tabelle B, die Fehler kann auftreten, wenn Sie mit dem abschneiden von Tabelle B).
Auch, der bug-report scheint zu zeigen, dass diese Feste in MySQL 5.6.19, aber ich habe noch nicht getestet noch nicht.
Wenn Sie nicht reparieren können, dann müssen Sie möglicherweise erstellen Sie einen cron-job, führt eine gespeicherte Prozedur alle paar Minuten. Dieser hack ist, aber es kann Ihnen helfen, das problem zu identifizieren. Könnte es sein, die Datenbank-Nutzung ist ausgereizt? Haben Sie das Betriebssystem, um zu sehen, was passiert, wenn dieser Fehler Auftritt. Sie sollten auch überprüfen Sie Ihre log-Dateien für einen Fehler. Ich habe gesehen, Fehler zu bauen bis zu dem Punkt, wo Sie beginnen, sich mit der Datenbank.
Andere Möglichkeit, ist die Tabelle, die Sie einfügen in eine große Tabelle mit vielen Indizes? Wenn ein verspätet, verursacht durch das einfügen es könnte zu einem Engpass in der Trigger.