2016-06-01 12 views
1

Ich möchte Feld aktualisieren server_prev_level_xp wenn NEW.server_xp > OLD.server_prev_level_xpWie erstellt man einen Trigger beim Update mit einer Bedingung basierend auf alten und neuen Daten?

ich MariaDB und seine documentation verwenden.

Ich versuche, diese aber es funktioniert nicht:

CREATE TRIGGER Level_Update 
AFTER UPDATE OF server_xp ON servers 
FOR EACH ROW 
WHEN (NEW.server_xp > OLD.server_prev_level_xp) 
BEGIN 
    SET NEW.server_prev_level_xp = OLD.server_prev_level_xp + OLD.server_prev_level_xp >> 1; 
    SET NEW.server_level = OLD.server_level + 1; 
END; 

Haben Sie einen Fehler in Zeile 4:

WHEN (NEW.server_xp > OLD.server_prev_level_xp) 

Was mache ich falsch?

+0

bitte mit Tabelle Schema und genaue Fehlerinformationen klären. – mootmoot

+0

'IF' (NEW.server_xp> OLD.server_prev_level_xp)? – mootmoot

+0

Welcher Fehler? Warum den Wert NACH dem Update ändern? – symcbean

Antwort

1

Die zum Erstellen des Triggers verwendete Syntax gilt nicht für MariaBD ([OF <trigger Column list>] und). Siehe CREATE TRIGGER.

Eine Option ist IF Statement zu verwenden.

Nicht vergessen:Such a SET statement has no effect in an AFTER trigger because the row change will have already occurred..

DELIMITER // 

CREATE TRIGGER `Level_Update` /*AFTER*/ BEFORE UPDATE ON `servers` 
FOR EACH ROW 
BEGIN 
    IF NEW.`server_xp` > OLD.`server_prev_level_xp` THEN 
    . 
    . 
    . 
    END IF; 
END// 

DELIMITER ; 
0

verwenden:

DELIMITER // 

CREATE TRIGGER `Level_Update` BEFORE UPDATE ON shp_servers 
FOR EACH ROW 
BEGIN 
    IF NEW.`server_xp` > OLD.`server_level_xp` THEN 
     SET NEW.`server_level_xp` = OLD.`server_level_xp` + OLD.`server_level_xp` >> 1; 
    END IF; 
END// 

DELIMITER ; 

haben:

1419 - Sie haben nicht die Berechtigung SUPER und binäre Protokollierung aktiviert ist (Sie könnte wollen Variable die weniger sichere log_bin_trust_function_creators verwenden)

Und versuchen Sie:

CREATE TRIGGER `Level_Update` BEFORE UPDATE ON shp_servers 
    FOR EACH ROW 
    BEGIN 
     IF NEW.`server_xp` > OLD.`server_level_xp` THEN 
      SET NEW.`server_level_xp` = OLD.`server_level_xp` + OLD.`server_level_xp` >> 1; 
     END IF; 
    END 

haben:

1064 - Sie haben einen Fehler in Ihrer SQL-Syntax; bei Zeile 5

Verwandte Themen