OVH Cloud OVH Cloud

[MySQL] et/ou [SQL Server] bien traiter les doublons...

6 réponses
Avatar
Gilles TOURREAU
Bonjour,

J'ai plusieurs contraintes UNIQUE dans différentes tables de ma base de
données. Cela pour éviter d'avoir des informations en doubles
(références en stock, ...etc).

J'ai une application qui demande à l'utilisateur de saisir des
informations à l'écran.

Je voudrais savoir comment gérer et prévenir l'utilisateur que les
informations qu'il a saisie existe déjà...

Je vois 2 solutions :
- Soit faire un INSERT et traiter les exceptions généré par SQL Server.
Si par exemple l'erreur n°2627 est déclenché (Violation d'une
contrainte) je dis alors à l'utilisateur de saisir autre chose !

- Ou alors je fais un SELECT avant le INSERT pour voir si ce que
l'utilisateur a saisie n'existe pas.

Selon vous quelle solution est la meilleure ?

En vous remerciant par avance de vos lumières...

Cordialement

--
Gilles TOURREAU
Responsable Informatique
gilles.tourreau@pos.fr

Société P.O.S
Spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr

6 réponses

Avatar
Rémy
"Gilles TOURREAU" a écrit dans le message de news:

Bonjour,



Bonjour,

<.......>
Selon vous quelle solution est la meilleure ?




Dans mes bases MySQL, je gère les problèmes de doublons en faisant en SELECT
avant l'INSERT, même si c'est pénalisant en terme de charge, ca me convient
mieux dans ma gestion...

En vous remerciant par avance de vos lumières...



Merci des tiennes surtout ;o)

@+
rémy
Avatar
Emmanuel Lecoester
"Gilles TOURREAU" a écrit dans le message de news:

Bonjour,

J'ai plusieurs contraintes UNIQUE dans différentes tables de ma base de
données. Cela pour éviter d'avoir des informations en doubles (références
en stock, ...etc).

J'ai une application qui demande à l'utilisateur de saisir des
informations à l'écran.

Je voudrais savoir comment gérer et prévenir l'utilisateur que les
informations qu'il a saisie existe déjà...

Je vois 2 solutions :
- Soit faire un INSERT et traiter les exceptions généré par SQL Server. Si
par exemple l'erreur n°2627 est déclenché (Violation d'une contrainte) je
dis alors à l'utilisateur de saisir autre chose !

- Ou alors je fais un SELECT avant le INSERT pour voir si ce que
l'utilisateur a saisie n'existe pas.

Selon vous quelle solution est la meilleure ?



Laisser faire la base de données. Ensuite si tu me dis qu'il n'y a que10% de
chances pour que ce soit un tout nouveau truc, le select avant serait plus
adapté.
Avatar
Firetox
Bonjour,

il faut juste gerer le message de retour
toutes les bases mySQL par exemple va renvoyer duplicate entry avec un N°
d'erreur
SQLServer aussi

il suffit d'avoir une gestion des N° erreur et si pas Ok alors soit une
plante soit un doublon
mais comme le dit manu faut laisser faire la base

bon dev
@+

Firetox
"Gilles TOURREAU" a écrit dans le message de news:

Bonjour,

J'ai plusieurs contraintes UNIQUE dans différentes tables de ma base de
données. Cela pour éviter d'avoir des informations en doubles (références
en stock, ...etc).

J'ai une application qui demande à l'utilisateur de saisir des
informations à l'écran.

Je voudrais savoir comment gérer et prévenir l'utilisateur que les
informations qu'il a saisie existe déjà...

Je vois 2 solutions :
- Soit faire un INSERT et traiter les exceptions généré par SQL Server. Si
par exemple l'erreur n°2627 est déclenché (Violation d'une contrainte) je
dis alors à l'utilisateur de saisir autre chose !

- Ou alors je fais un SELECT avant le INSERT pour voir si ce que
l'utilisateur a saisie n'existe pas.

Selon vous quelle solution est la meilleure ?

En vous remerciant par avance de vos lumières...

Cordialement

--
Gilles TOURREAU
Responsable Informatique


Société P.O.S
Spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr




Avatar
Gilles TOURREAU
Gilles TOURREAU a écrit :
Bonjour,

J'ai plusieurs contraintes UNIQUE dans différentes tables de ma base de
données. Cela pour éviter d'avoir des informations en doubles (références en
stock, ...etc).

J'ai une application qui demande à l'utilisateur de saisir des informations à
l'écran.

Je voudrais savoir comment gérer et prévenir l'utilisateur que les
informations qu'il a saisie existe déjà...

Je vois 2 solutions :
- Soit faire un INSERT et traiter les exceptions généré par SQL Server. Si
par exemple l'erreur n°2627 est déclenché (Violation d'une contrainte) je dis
alors à l'utilisateur de saisir autre chose !

- Ou alors je fais un SELECT avant le INSERT pour voir si ce que
l'utilisateur a saisie n'existe pas.

Selon vous quelle solution est la meilleure ?

En vous remerciant par avance de vos lumières...

Cordialement



Merci pour vos réponses... Je vais adopter la méthode n°1 et essayer de
trouver le n° d'erreur qui correspont à une erreur de doublon pour les
différentes bases...

Cordialement

--
Gilles TOURREAU
Responsable Informatique


Société P.O.S
Spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr
Avatar
Emmanuel Lecoester
> Merci pour vos réponses... Je vais adopter la méthode n°1 et essayer de
trouver le n° d'erreur qui correspont à une erreur de doublon pour les
différentes bases...




demande nous si besoin ;)
Avatar
Jerome PAULIN
> - Ou alors je fais un SELECT avant le INSERT pour voir si ce que
l'utilisateur a saisie n'existe pas.



Bonjour,

Sous MySQL, tu peux peut etre utiliser l'instruction replace() au lieu
de ton insert(), c'est fait pour éviter le doublons (quand la clé
primaire n'est pas une clé de type autonumber)...

gg