Vergleicht man eine Null in einen anderen Wert in der MySQL-Trigger
So, hier ist mein Problem, ich bin den Vergleich alte und neue Werte, wenn eine Zeile in der Tabelle aktualisiert wird. Aber der neue oder der alte Wert manchmal null sein. Also der code unten funktioniert nicht. Können kann ich das Problem beseitigen?
Danke
BEFORE UPDATE ON mytable
FOR EACH ROW
BEGIN
IF OLD.assignedto != NEW.assignedto
THEN
INSERT INTO history
(
asset ,
changedfield ,
oldvalue ,
newvalue
)
VALUES
(
NEW.asset,
'assignedto',
OLD.assignedto,
NEW.assignedto
);
END IF;
END$$
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen:
Der Kommentar ist sehr richtig.
NULL or <foo> or <bar>
wirdNULL
. Sie haben, mit zu arbeitenCOALESCE()
.COALESCE()
. Das heißt, die Koaleszenz, die Antworten sind gut.COALESCE
obwohl-ignorieren Sie nicht die anderen Antworten!MySql hat eine spezielle null-sichere überprüfung auf Gleichheit operator:
Dieser operator kann mit dem not-operator:
So, in Ihrem Fall sollten Sie schreiben:
null-Werte müssen verglichen werden mit den
is null
/is not null
konstruieren:You ' L anpassen, die zu Ihren Anforderungen passen, als dieser wieder kommen wird wahr, wenn entweder null ist, oder Sie sind nicht einander gleich. Vielleicht müssen Sie behandeln den Fall, wo beide null sind.
Kann man nicht vergleichen gegen NULL, weil NULL ist definiert als ein Wert, der nie matches, im Vergleich auch zu anderen NULL-Werte. Versuchen Sie, für sich selbst, wenn Sie mir nicht glauben.
Haben Sie, um zu überprüfen, dass die betreffende Spalte ist nicht null IST NICHT NULL. Können Sie den UND-oder ODER-operator, um solche einen test in der Logik, die Sie bereits haben.
Wenn die
OLD.assignedto != NEW.assignedto
Teil hat ein BetreiberNULL
, der ganze Ausdruck wirdNULL
machenCOALESCE()
Gegenzug das nächste argument statt, die Renditen der Wahrheit Wert zu verwenden, wenn einer von Ihnen istNULL
- der andere mussNULL
als gut.Ich weiß, das ist alt, aber es gibt eine etwas klarere Art und Weise zu schreiben, dass Zustand:
Diese Weise werden Sie sagen, den Motor zu ersetzen, die Null-Werte mit einer 0, so ist die Bedingung nicht verfehlen wird durch den Vergleich auf NULL.