Hi,
Ja, ich hab was vergessen, zu erwähnen, das Statement:
INSERT INTO user(user_name, user_id)
VALUES(?,?)
ON DUPLICATE KEY UPDATE user_name=?
`ON DUPLICATE KEY UPDATE`{:.language-sql} macht hier den Unterschied. Je nachdem, ob der Constraint zuschlägt, wird ggf. der AFTER UPDATE-Trigger ausgeführt, und nicht der AFTER INSERT.
Zitat aus [der MySQL-Dokumentation](http://dev.mysql.com/doc/refman/5.1/de/create-trigger.html):
"Es ist wichtig, zu verstehen, dass das trigger\_event weniger eine Art von SQL-Anweisung ist, die den Trigger aktiviert, als vielmehr eine Art von Tabellenoperation. So wird beispielsweise ein INSERT-Trigger nicht nur von INSERT-Anweisungen, sondern auch von LOAD DATA-Anweisungen aktiviert, weil beide Anweisungen Zeilen in eine Tabelle einfügen.
Ein potenziell verwirrendes Beispiel dafür ist die Syntax von INSERT INTO ... ON DUPLICATE KEY UPDATE ...: Für jede Zeile wird ein BEFORE INSERT-Trigger aktiviert, gefolgt entweder von einem AFTER INSERT-Trigger oder von dem Triggerpaar aus BEFORE UPDATE und AFTER UPDATE, je nachdem, ob ein doppelter Schlüssel für die Zeile vorlag oder nicht."
Bis die Tage,
Matti
--
[Webapplikationen in C++ entwickeln](http://tntnet.org/)