[MySQL] Problème avec Replace

Problème avec Replace [MySQL] - SQL/NoSQL - Programmation

Marsh Posté le 13-06-2005 à 12:26:56    

Voici ma requête :
replace rosier (ronum,rovar,roctr,ropgf,rocam,ropal,roqte) values (8,'B743000','XXX','L','C001',34,60)
 
Structure de ma table :
Champ   Type    
ronum   int(11)      
rovar   varchar(20)
roctr   varchar(10)
ropgf   char(3)
rocam   varchar(4)
ropal   int(11)
roqte   int(10)
 
Nom de la clé   Type   Cardinalité   Champ
PRIMARY  PRIMARY  1   ronum (autoincrement)
 
Mon soucis, si l'enregistrement n'existe pas il est crée. C'est normal.
Si il existe, une ligne est mise à jour et une autre est crée !
deux lignes identiques sont crées avec la même clé primaire apparement!
 

Code :
  1. Nombre d'enregistrements insérés : 2
  2. Identifiant de l'enregistrement inséré: 8 (traitement: 0.0020 sec.)
  3. requête SQL:
  4. REPLACE rosier(
  5. ronum,
  6. rovar,
  7. roctr,
  8. ropgf,
  9. rocam,
  10. ropal,
  11. roqte
  12. )
  13. VALUES ( 8, 'B743000', 'XXX', 'L', 'C001', 34, 60 )


 
Comment est-ce possible ?
:x.
Bug ?
 
 

Reply

Marsh Posté le 13-06-2005 à 12:26:56   

Reply

Marsh Posté le 13-06-2005 à 12:55:29    

a mon avis plutot un pb de clef
verifie que ronum est bien une clef primaire , et pas un index  
 
( mais bon si il est en auto increment , normalement c al clé )


---------------

Reply

Marsh Posté le 13-06-2005 à 13:32:04    

bon bah j'ai redemarré tout le PC, BBD + serveur + client et pour l'instant ca à l'air "normal" mais bon ... cette histoire m'intrigue Oo
 
et ronum est bien clé primaire, je l'ai même enlevé puis remis, si ca persiste, je supprimerai carrèment le champs pour le recrée ...

Reply

Marsh Posté le 14-06-2005 à 10:02:23    

Mon soucis venait d'une autre requête qui n'affichait pas ce que je demandais.
 
Quand à l'histoire :
"Nombre d'enregistrements insérés : 2"
 
Ca reste un mystère vu qu'une seule de ces deux lignes apparait en BDD ...

Reply

Marsh Posté le 14-06-2005 à 10:19:53    

ce qui est totu a fait normal si tu utilise mysql_affected_rows

Citation :

Note that when you use a REPLACE command, mysql_affected_rows() returns 2 if the new row replaced an old row. This is because in this case one row was inserted after the duplicate was deleted.


http://dev.mysql.com/doc/mysql/en/ [...] -rows.html


---------------

Reply

Marsh Posté le 15-06-2005 à 09:59:12    

merci beaucoup pour cette explication ;)

Reply

Marsh Posté le 12-07-2005 à 11:45:42    

j'ai encore une question en fait sur replace.
 
J'ai cru comprendre que lorsque l'enregistrement existait, il était simplement mis à jour.
 
Hors dans mon cas, comme l'expliques très bien flo850, mon enregistrement est systèmatiquement supprimé puis recrée.
 
Donc si ma requête Replace ne renseigne que 3 champs sur 10 dont la clé primaire, je me retrouve avec 7 champs non renseignés (valeurs par défaut) alors qu'ils pouvaientt très bien être initialisés avant  :sweat: .
 
J'ai loupé un option pour forcer un update au lieu d'un delete + insert en cas d'existence de la clé primaire ?


Message édité par jeoff le 12-07-2005 à 11:47:48
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed