mer
16
jan '08
# 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;








Commentaires
1. Le mercredi 6 juin 2007 à 11:10, par zefredz
2. Le jeudi 7 juin 2007 à 11:51, par Somebaudy
3. Le jeudi 7 juin 2007 à 12:38, par Jean-Marc Fontaine
4. Le jeudi 7 juin 2007 à 14:02, par Guile
5. Le jeudi 7 juin 2007 à 21:44, par Moosh
6. Le vendredi 8 juin 2007 à 22:31, par Perrich
7. Le vendredi 8 juin 2007 à 22:50, par Moosh
8. Le dimanche 10 juin 2007 à 23:57, par Guile
9. Le lundi 11 juin 2007 à 00:06, par Moosh
10. Le lundi 11 juin 2007 à 18:29, par raphpell
11. Le lundi 11 juin 2007 à 19:15, par Moosh
12. Le mercredi 13 juin 2007 à 16:28, par Juju
13. Le mercredi 13 juin 2007 à 18:00, par Moosh
14. Le vendredi 10 août 2007 à 08:52, par NeqO
15. Le mardi 28 juillet 2009 à 09:33, par Syndrael
Ajouter un commentaire