comment avoir juste le bon coté du auto_increment de mysql? - SQL/NoSQL - Programmation
Marsh Posté le 14-03-2003 à 16:10:55
fbthereturn a écrit : Bonjour, je vous explique, |
t'as vraiment envie d'exploser ta complexité ?
Marsh Posté le 14-03-2003 à 18:53:23
fbthereturn a écrit : il n'y a pas un truc simple pour résoudre cela? |
Y'a vraiment un intérèt à le faire ?
Marsh Posté le 14-03-2003 à 19:19:56
fbthereturn a écrit : Bonjour, je vous explique, |
Pas possible/inutile.
Pour ce que tu veux faire, il faut incrémenter et décrémenter à la main et faire une batterie de tests/modifications pour faire un décalage. Tu inventes un champ "ordre". Et tu réalises une boucle en faisant descendre de 1 tous les valeurs du champ "ordre" supérieur à ton champ qui vient de disparaitre.
Mais, c'est très rare d'avoir besoin de faire ça. ça peut servir lorsqu'on propose dans un site dynamique permettant de creer ses propres catégories d'ordonner ces mêmes catégories.
Marsh Posté le 14-03-2003 à 19:33:59
fbthereturn a écrit : Bonjour, je vous explique, |
Pour bien faire la primary key d'un record est identifiant de ce record à jamais meme si il a été effacé. Imagine que pour une raison lambda tu gardes la référence vers le record Id 18 dans un client quelconque. Qqun d'autre vire le record 18 puis tu récrée un autre,complètement différent et mySQL lui file l'id 18. Avoue que c'est un peu foireux non
Marsh Posté le 14-03-2003 à 19:53:02
oui, et en plus c vraiment faire compliqué...
pourquoi s'embeter avec ça...
Marsh Posté le 14-03-2003 à 20:59:26
Je crois qu'il y a une commande pour "réinitialiser" le compteur. Mais laquelle ...
Marsh Posté le 14-03-2003 à 21:15:08
il n'y en a qu'une à ma connaissance: en recréant la table. Même en Access, sauf que ça s'appelle compactage, mais en réalité, il recrée l'entièreté du fichier MDB pour éliminer les zones inutilisées.
Marsh Posté le 15-03-2003 à 10:56:24
DarkLord a écrit : |
ok pour ça .. c à moi de vérifier
sinon, oui
Code :
|
c un peu ça que je veux faire
et quand la primary key arrive au bout de la valeur admissible?
qu'est ce qu'il se passe?
genre 255 pour un tinyint.. ça fait quoi aprés?
Marsh Posté le 15-03-2003 à 14:44:22
fbthereturn a écrit :
|
bin dans ce cas tu as ton id autoicrémenté et une colonne supplémentaire avec l'id de la catégorie si tu veux pouvoir la réallouer etc ... mais agir sur une vraie primary key c'est une erreur de design
Marsh Posté le 15-03-2003 à 14:44:55
fbthereturn a écrit : |
unsigned -> ca se crashe je pense
signed -> -255
Marsh Posté le 15-03-2003 à 16:36:36
DarkLord a écrit : |
Exact ! C'est exactement ce que j'ai fait dans mon dernier site pour une cliente.
Marsh Posté le 16-03-2003 à 11:08:29
Hermes le Messager a écrit : |
Marsh Posté le 03-04-2003 à 14:22:32
quelqu'un peut confirmer cela???
Code :
|
Marsh Posté le 03-04-2003 à 18:26:43
Bon je résume la situation.
Dans une relation de clients, on en insert 20
Donc client 1,2,3 ... 20
On vire le 20ième puis on insert un nouveau client, ce nouveau client aura un id 21, ce qui laisse un trou entre 19 et 21, y'a pas un ordre SQL qui donne à l'attribut d'auto increment la bonne valeur après des suppressions ???
++
Marsh Posté le 04-04-2003 à 17:26:47
Sans inserer un nouvel enregistrement,
est il possible de savoir
quel valeur id(autoincrement) va avoir?
Marsh Posté le 04-04-2003 à 20:20:37
Je comprends pas pkoi utiliser l'autoincrementation ds ce cas ... l'A.I. sert justement à pas se faire chier avec des ID unique a rentrer a chaque fois. Si c pour tout reorganiser a chaque fois, l'AI ne sert à plus rien ... dans ce cas autant tout rentrer manuellement. Meme si, comme ds ton exemple, ca devai sauter de 19 à 21 ... ca pose pas de pb il me semble, si ?
Edit, de toute façon, dans ce cas la, si c pour que tes chiffres aillent de 1 à 48 si tu as 48 enregistrement, puis de 1 à 38 si tu en vires 10 ... autant ne rien mettre et utiliser la fonction COUNT pour savoir combien il y a de données ds la BDD...
Marsh Posté le 06-04-2003 à 23:35:13
Je conserve les avantages de l'auto increment mais j'aimerais juste que la liste soit sans trou si on en vire qq uns et qu'on en rajoute après ...
Marsh Posté le 06-04-2003 à 23:42:12
Tu peux passer un script de temps en temps qui va modifier les numéros. Mais attention si ces numéros sont utilisés à un autre endroit
Ou alors tu crées une liste des numéros non attribués. A l'insertion, tu prends un numéro dans cette liste et tu l'utilises. S'il n'y en a pas dans la liste, tu fais l'insertion sans préciser de numéro pour utiliser l'auto-incrémentation
Autre possibilité : tu ne supprimes pas les enregistrements de ta table, mais tu les marque comme étant réutilisables. Au moment d'insérer, tu regardes si des numéros sont disponibles et, si oui, tu en utilise un (tu fais un UPDATE au lieu d'un INSERT)
Marsh Posté le 30-04-2003 à 09:49:26
Sans inserer un nouvel enregistrement,
est il possible de savoir
quel valeur id(autoincrement) va avoir?
Marsh Posté le 30-04-2003 à 09:54:30
DarkLord a écrit : |
si c'est signé, ca ne va pas jusqu'à 255, mais de -128 à 127
Marsh Posté le 30-04-2003 à 10:20:47
fbthereturn a écrit : Sans inserer un nouvel enregistrement, |
phpMyAdmin donne le numéro suivant, il doit donc y avaoir une fonction mysql qui te donne cette valeur. cf doc.
Marsh Posté le 30-04-2003 à 12:02:20
et quand on insère un enregistrement, ça pourrait nous retourner l'id de l'enregistrement?
Marsh Posté le 30-04-2003 à 12:58:40
fbthereturn a écrit : et quand on insère un enregistrement, ça pourrait nous retourner l'id de l'enregistrement? |
à avoir pê du côté de LAST_INSERT_ID()
Marsh Posté le 14-03-2003 à 16:05:38
Bonjour, je vous explique,
auto_increment permet de générer un nombre unique
mais le problème
c'est qu'une fois 20 enregistrements sauvegardés puis qu'on supprime tout ou une partie,
lorsqu'on en rentre 1 nouveau, auto_increment génére "21"
alors que un nombre inférieur aurait pu aller...
comment fait on pour avoir par exemple, le premier nombre libre à partir de 1?