[MySQL] Trigger und LAST_INSERT_ID()

strolch00

redraft.de
ID: 155297
L
21 April 2006
1.684
72
Hi @all,

ich habe versucht einen Trigger zu erstellen, was auch geklappt hat. Allerdings funktioniert indem Trigger LAST_INSERT_ID() nicht. Die Funktion liefert mir immer 0 zurück.

Der Trigger sieht vereinfacht folgendermaßen aus:
PHP:
CREATE TRIGGER `xxx` AFTER INSERT ON `tab`
     FOR EACH ROW
       INSERT INTO `tab_two` (`page_id`,`menu_id`,`order_id`, `ident_key`) VALUES (LAST_INSERT_ID(), 1, 1, MD5(LAST_INSERT_ID()));

Hoffe ihr habt einen Rat für mich.

Ps ich könnte evtl auch MAX() nehmen aber ich weiß nicht ob das irgendwann mir zum Verhängnis wird.

Und ich weiß nicht ob es was ausmacht aber es ist eine InnoDB Tabelle.

*edit
Ohje ich habe die Befürchtung das es nicht gehen wird, nach nochmaligem suchen bei Google mit anderen Suchbegriffen bin ich auf folgendes gestoßen:


Oder habe ich das falsch verstanden? Mein Englisch ist nicht das beste, jedoch denke ich habe ich den Sinn so richtig erfasst.

*edit2
Habe jetzt noch eine andere Lösung gefunden, welche anscheinend funktionieren soll. Jedoch wenn ich das bei mir im Phpmyadmin eingeben will geht das nicht, der Code dafür ist wie folgt:
PHP:
     DELIMITER $$
     CREATE TRIGGER `xxx` AFTER INSERT ON `tab`
     FOR EACH ROW BEGIN
       DECLARE LAST_ID INT;
       SET LAST_ID = LAST_INSERT_ID();
       INSERT INTO `tab_two` (`page_id`,`menu_id`,`order_id`, `ident_key`) VALUES (LAST_ID, 1, 1, MD5(LAST_ID));
     END$$
     DELIMITER ;
Aber es kommt immer folgender Fehler:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DELIMITER $$
CREATE TRIGGER `xxx` AFTER INSERT ON `tab`
FOR E' at line 1
 
Zuletzt bearbeitet:
Habe es jetzt mal mit SELECT MAX(`xxx`).... gelöst, da mir aber wie gesagt die Lösung nicht 100%ig gefällt würde ich mich freuen wenn jemand doch noch einen anderen Rat hat. Aber so funktioniert es jetzt erstmal.
 
du hast hier je nach Triggertype die Variablen NEW und OLD zur Verfügung:

Code:
CREATE TRIGGER `xxx` AFTER INSERT ON `tab`
     FOR EACH ROW
       INSERT INTO `tab_two` (`page_id`,`menu_id`,`order_id`, `ident_key`) VALUES ( NEW.`id`, 1, 1, MD5( NEW.`id` ));