2009-08-06 8 views
1

Comment puis-je obtenir Mysql pour générer de façon incrémentielle un nombre compris entre 0 et 99999 et l'ajouter à l'enregistrement? Aussi une fois que 99999 est atteint, il commence à 0.Mysql répéter des nombres incrémentaux?

Répondre

0

Vous voulez AUTO_INCREMENT. Bien que la remise à zéro à 99999 puisse être un problème. Je voudrais également remettre en question votre exigence que cela fonctionne de cette façon.

+0

Je ne pense pas qu'il existe un moyen de réinitialiser 'auto_increment' sauf si vous supprimez des lignes, tronquez la table ou recréer la colonne. – Eric

0

Si vous avez besoin de le réinitialiser, vous pouvez créer un déclencheur:

create trigger auto_number before insert on `sometable` 
begin 
    new.autoid = coalesce((select max(autoid)+1 from sometable),0) % 1000000 
end 

Essentiellement, lorsqu'un insert se produit, cela crée juste la colonne autoid comme le prochain grand ID. Cependant, il utilise modulo pour s'assurer que le nombre se répète à 1 000 000.

+0

Cela ne fonctionnera pas. Vous frapperez l'autoïde max, puis max (autoïde) deviendra une constante. Ainsi, vous génèrerez à plusieurs reprises le même identifiant. Sans oublier qu'il vaudrait mieux avoir un bon index, ou ce sera/lent /. – derobert

+0

@derobert: .... c'est ce que le PO a demandé. 0 à 99999, puis répétez-le à nouveau. – Eric

1

Générer un nombre toujours incrémenter (par exemple, un auto_increment standard), puis lors de la sélection des données (ou via une vue), exécutez par mod 100000:

⋮ 
99998 % 100000 = 99998 
99999 % 100000 = 99999 
100000 % 100000 = 0 
100001 % 100000 = 1 
⋮ 

Vous pouvez faire cette transparence en créant une vue de sélection:

CREATE SQL SECURITY INVOKER VIEW whatever AS 
    SELECT 
    foo, bar, baz, autoid % 100000 AS autoid, taz 
    FROM base_table; 

Malheureusement, ce point de vue ne sera probablement pas actualisable et MySQL ne supporte pas les INSTEAD OF déclencheurs, de sorte que vous devrez envoyer écrit à la table sous-jacente.

+0

Pensez-vous que ce serait mieux si je laisse PHP faire cela à la place? – EddyR

+0

@EddyR: Aucune idée s'il serait préférable de laisser PHP faire cela; vous n'avez pas du tout décrit * pourquoi * vous voulez le faire. – derobert

Questions connexes