mercredi 16 janvier 2008
mer
16
jan '08
REPLACE reset les valeurs non spécifiées
Dans la rubrique Mysql
# Je crée une table DROP TABLE IF EXISTS `testReplace`; CREATE TABLE `testReplace` ( `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, `a` INT(11) DEFAULT '1', `b` INT(11) DEFAULT '2', PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1; #J'y ajoute 2 records /lignes/tuples INSERT INTO `testReplace` (`a`, `b`) VALUES (1, 1),(2,2); SELECT * FROM `testReplace`;
id | a | b ============ 1 | 1 | 1 2 | 2 | 2
#Je remplace la première valeur de la première ligne REPLACE INTO `testReplace` SET `id`=1, a=3; # que vaut b ?
SELECT * FROM `testReplace`;
id | a | b ============ 1 | 3 | 2 2 | 2 | 2
B a repris sa valeur par défaut
En pratique cela veut dire que si on fait un replace et qu'on ne précise pas toutes les colonnes les colonnes non-spécifiées prennent la valeur par défaut alors qu'on peut s'attendre à un "non" changement.
Il est donc faux de croire que REPLACE c'est un exist(id) ? UPDATE : INSERT
C'est plutôt
exist(id) ? DELETEsuivi d'un INSERT
Il faut donc utiliser une autre méthode.
INSERT INTO table (id,a) VALUES (1,3) ON DUPLICATE KEY UPDATE a=3;


15
-![[T]](http://static.technorati.com/pix/icn-talkbubble.gif)






