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"
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.Code:
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
Voila ma tentative d'upsert :
Sauf que qu'un nouvel id_model est créé même si le tuple (prod_firmware,prod_model) existe déjà ...Code: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
Comment procéder svp ?
PS: rien vu dans la FAQ ni dans ce tuto à propos d'upsert.