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"
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 :
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.
Partager