Frage zu "ON DUPLICATE KEY"
am 17.08.2007 13:34:18 von Thomas BarthHallo,
um einen Select vor einem Insert oder einem Update zu vermeiden, möchte
ich nun mit "ON DUPLICATE KEY" Insert und Update zusammenfassen.
Getrennt sehen die beiden Anfragen so aus:
INSERT INTO agent_customers(date_time, customer_id, mt_cnt, agent_id)
VALUES('2007-08-17 13:02:37', '1', 1, 3);
UPDATE agent_customers
SET mt_cnt = mt_cnt + 1,
date_time = '2007-08-17 13:02:37'
WHERE customer_id = 1 AND agent_id = 3;
Angewendet werden sie auf folgende Tabelle
+-------------+------------------+------+-----+------------- --------+
| Field | Type | Null | Key | Default |
+-------------+------------------+------+-----+------------- --------+
| date_time | datetime | NO | | 2007-01-01 00:00:00 |
| customer_id | int(10) unsigned | NO | PRI | 0 |
| mt_cnt | mediumint(9) | NO | | 0 |
| agent_id | int(10) unsigned | NO | PRI | 0 |
+-------------+------------------+------+-----+------------- --------+
Hier die Zusammenfassung:
INSERT INTO agent_customers(date_time, customer_id, mt_cnt, agent_id)
VALUES('2007-08-17 13:02:37', 1, 1, 3)
ON DUPLICATE KEY
UPDATE agent_customers SET mt_cnt = mt_cnt + 1, date_time = '2007-08-17
13:02:37';
Da customer_id und agent_id als PRIMARY KEY definiert sind, habe ich sie
beim UPDATE weggelassen. Warum erhalte ich immer einen Syntaxfehler?
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 'SET
mt_cnt=mt_cnt+1' at line 1
Es heißt doch schließlich laut Doku
INSERT INTO table (a,b,c) VALUES (1,2,3)
ON DUPLICATE KEY UPDATE c=c+1;
(http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate. html)
MySQL Version ist 5.0.44
Thomas B