ProZeratul


1130 messages

Membre

Jeudi 26 Mars 2009 - 16:57 (post édité 2 fois)

Salut salut

Pour mon pti de fin d'année j'ai fait un programme de gestion de client et de leur compte, j'ai mon programme qui me permet de supprimer les client et leur compte (suppression en cascade) MAIS pour l'ajout des client j'ai fait en sorte de prendre le dernier client, de l'incrémenter moi même pour le rebalancer avec la requete d'ajout, le problème c'est que si le client 5 est supprimer il ne sera jamais réutiliser : ptit schéma

Nclient Nom Prenom
1 x x
2 x x
3 x x

Je fait ma requete pour supprimer le client N2 j'obtien

1 x x
3 x x

Mais si je rajout un client j'aurai donc

1 x x
3 x x
4 (new client auto incrémenter par mon prog)

Y a t'il une requete SQL qui pourrait décaler d'un rang ma clé primaire (quand je supprime qu'il passe le 3 en 2 le 4 en 3 etc ....)

Merci !

edit : mes relations

Client(Nclient,Nomcli,Prenomcli,Agecli)
Compte(Ncompte,Solde,#Nclient)

rumpl


adjoint

1434 messages

Membre, Developpeur, LAN-MASTER, Retraité

Jeudi 26 Mars 2009 - 17:07

De temps en temps, il y a des gens qui viennent et qui veulent s'amuser avec l'AUTO_INCREMENT.

Il y a moyen de changer la valeur courante de l'auto_increment, mais il n'y a aucun moyen (atuomatique) de faire ce que tu veux faire.

Et pis, si tu y reflechis, c'est debile ce que tu veux : c'est juste un id qui te sert a identifier une entite et a lier d'autres avec celle ci, sa valeur, tu t'en fous.

Tu fais quoi avec toutes les autres tables qui gardent cet id pour savoir a qui ils appartiennent ? Tu les changes aussi ? Et si il y en a 10 million ? Tu va attendre 10min a chaque fois que tu efface un truc dans ta BDD ?


Les choses qui méritent d'être faites méritent d'être mal faites.

T-oday I bake, to-morrow brew,
the next I'll have the young queen's child.
Ha, glad am I that no one knew
that Rumpelstiltskin I am styled.

nakuni


adjoint

11085 messages

Membre, Developpeur, LAN, Retraité, Chef (ED)

Jeudi 26 Mars 2009 - 17:16

Bah ça peut servir genre si tu as besoin de faire un SELECT nom FROM clients WHERE num BETWEEN 20 AND 40 à la limite (pour éviter le LIMIT justement), mais bon comme dit rumpl dans ton cas ça ne servirait à rien de se prendre la tête pour ça apparemment.


 

rumpl


adjoint

1434 messages

Membre, Developpeur, LAN-MASTER, Retraité

Jeudi 26 Mars 2009 - 17:23

Nakuni a écrit :
Bah ça peut servir genre si tu as besoin de faire un SELECT nom FROM clients WHERE num BETWEEN 20 AND 40 à la limite (pour éviter le LIMIT justement), mais bon comme dit rumpl dans ton cas ça ne servirait à rien de se prendre la tête pour ça apparemment.


Alors il faut le faire sur un autre champ qui n'est pas une clef.
Et pourquoi eviter le LIMIT ?

Les choses qui méritent d'être faites méritent d'être mal faites.

T-oday I bake, to-morrow brew,
the next I'll have the young queen's child.
Ha, glad am I that no one knew
that Rumpelstiltskin I am styled.

nakuni


adjoint

11085 messages

Membre, Developpeur, LAN, Retraité, Chef (ED)

Jeudi 26 Mars 2009 - 17:28

Parceque quand tu fais un LIMIT, SQL regarde dans toute la table et n'affiche que ce qui est demandé dans le LIMIT en fait, donc si tu veux 20 enregistrement sur 10000 il va en parcourir 9980 pour rien.


 

rumpl


adjoint

1434 messages

Membre, Developpeur, LAN-MASTER, Retraité

Jeudi 26 Mars 2009 - 17:31

Ce n'est pas toujours le cas. LIMIT utilise les index parfois.


Les choses qui méritent d'être faites méritent d'être mal faites.

T-oday I bake, to-morrow brew,
the next I'll have the young queen's child.
Ha, glad am I that no one knew
that Rumpelstiltskin I am styled.

nakuni


adjoint

11085 messages

Membre, Developpeur, LAN, Retraité, Chef (ED)

Jeudi 26 Mars 2009 - 17:55

Tu fais chier avec tes index Razz


 

rumpl


adjoint

1434 messages

Membre, Developpeur, LAN-MASTER, Retraité

Jeudi 26 Mars 2009 - 17:58

Ouaaaaaais, je saaaais, mais c'est toi qui a commence Razz


Les choses qui méritent d'être faites méritent d'être mal faites.

T-oday I bake, to-morrow brew,
the next I'll have the young queen's child.
Ha, glad am I that no one knew
that Rumpelstiltskin I am styled.

Tompuce


703 messages

Jeudi 26 Mars 2009 - 19:56

En résumé: en pratique on s'en fout de la valeur de l'id. Mais notre collègue il a un problème de "pti" -> c'est une épreuve scolaire... Et comme il s'agit de valider un savoir-faire: soyons heureux que sql ne propose pas de solution technique automatique => il faut coder un algo qui donnera le "bon" id qui servira dans l'insert pour qu'il n'y ait pas de trou dans la liste de valeurs des id. D'un point de vue purement scolaire c'est intéressant. Donc à la question du post deux solutions envisageables:
1) faire une procedure stockée ou 2) coder un algo Clin d

Xabi


2075 messages

Membre, Developpeur, LAN

Jeudi 26 Mars 2009 - 20:31

changer un id ca ne se fait tout simplement pas
si tu change les id de tes clients ca veux aussi dire qu'il faut mettre a jour toute les clefs etrangère de toutes les tables et comme c'est probablement la données centrale de ton appli il va apparaitre dans toutes les tables...
il est peut probable en plus que les contrainte d'intégrité de ta base te laisse faire de telles choses
un id c'est une donnée technique t'as pas à y toucher... tente tu verras que tu va fligué ta base Content


les 2 principes de la réussite :

1- Ne jamais révéler tout son savoir.
Absolute Dreams
Zog Zog !


Tompuce


703 messages

Jeudi 26 Mars 2009 - 20:35

Je ne crois pas qu'il veuille faire cette "sauvagerie" : il veut juste pouvoir réutiliser les valeurs des ids qui ont été précédemment supprimés. Du genre j'avais client n° 1 | 2 | 3, je supprime le n° 2. Si je fais un nouvel insert il se mettra normalement en n° 4 alors que le n° 2 est libre. Est-ce bien ça la problématique ?

ProZeratul


1130 messages

Membre

Jeudi 26 Mars 2009 - 20:59

Tompuce a écrit :
Je ne crois pas qu'il veuille faire cette "sauvagerie" : il veut juste pouvoir réutiliser les valeurs des ids qui ont été précédemment supprimés. Du genre j'avais client n° 1 | 2 | 3, je supprime le n° 2. Si je fais un nouvel insert il se mettra normalement en n° 4 alors que le n° 2 est libre. Est-ce bien ça la problématique ?


exact tompuce ! et oui le pti c'est une épreuve scolaire, et oui cette demande "alacon" vien pas de moi mais d'un de mes profs -_-'

nakuni


adjoint

11085 messages

Membre, Developpeur, LAN, Retraité, Chef (ED)

Vendredi 27 Mars 2009 - 10:27

Tu trouveras surement ton bonheur via cette requête sur google non? (pas le temps de vérifier)


 

lemonhead


dirigeant

18018 messages

Fondateur, Dirigeant, Membre, Developpeur, LAN-MASTER, Streamer, Corpo, Designer, Adjoint (ED)

Vendredi 27 Mars 2009 - 14:22

Dis à ton abruti de prof que sur son petit nuage, il peut s'amuser à faire ça, mais qu'on fait pas ça dans la vraie vie ! Content


« Lemon est vraiment un Malade... Heureusement qu'il est de notre côté.» (Guzmud)

« Lemon est fort, Lemon est beau, Lemon est sexy, Lemon est omniscient, Lemon est THE Lemon » (Violenconjugal)

« Lemon a un monde à lui dans sa tête » (Im_a_player)

« Putain, ca devient trop ce clan. Bientot on appelera Lemon le Parrain et le clan la Famille. Nawak » (Rumpl)

« Lemon est le seul mec qui préfère qu'on lui dise qu'il a une grosse femme plutôt qu'une grosse bite. » (Thrallscream)

« Lemon vient de me montrer... c'est ENORME !!! » (Seven)

« Lemon est un dieu, et Thrall a une.... enfin bon, je m'égare. » (Titi-fr)

Xabi


2075 messages

Membre, Developpeur, LAN

Vendredi 27 Mars 2009 - 18:40

j'allais dire la même chose mais j'ai eu la flemme
parfois on est amené a faire des exercices idiots pour la pédagogie mais la c'est vraiment donner de tres tres tres mauvaises idées à ses eleves...


les 2 principes de la réussite :

1- Ne jamais révéler tout son savoir.
Absolute Dreams
Zog Zog !


Liens utiles : Rechercher - Droits d'accès