Bonjour,

Pas un grand spécialiste de SQL, je cherche à réaliser un upsert directement avec SQL avec le moteur MyIsam, sans jongler avec le code (bash) :

La table "model"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
CREATE TABLE `model` (
 `id_model` int(11) NOT NULL auto_increment,
 `id_product` int(11) NOT NULL,
 `prod_model` varchar(20) collate utf8_unicode_ci NOT NULL,
 `prod_firmware` varchar(20) collate utf8_unicode_ci NOT NULL,
 `updated` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
 PRIMARY KEY  (`id_model`),
 UNIQUE KEY `one_idmodel_4_one_firmware` (`id_model`,`prod_firmware`,`prod_model`),
 KEY `prod_firmware` (`prod_firmware`),
 KEY `prod_model` (`prod_model`)
) ENGINE=MyISAM AUTO_INCREMENT=8 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
Je voudrais être certain de n'avoir qu'un seul tuple de valeurs (id_model`,`prod_firmware`,`prod_model), lors d'une insertion. Si le tuple existe déjà, seul le champ "updated" est sensé se mettre à jour lors de l'insertion.

Voila ma tentative d'upsert :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
INSERT INTO model (id_model, id_product, prod_model, prod_firmware, updated) VALUES (null,20,\"mon_produit\",\"son_firmware\",null) ON DUPLICATE KEY UPDATE updated=null
Sauf que qu'un nouvel id_model est créé même si le tuple (prod_firmware,prod_model) existe déjà ...

Comment procéder svp ?

PS: rien vu dans la FAQ ni dans ce tuto à propos d'upsert.