Hallo,
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
