2010-04-14 4 views
2

Dites que j'ai une table avec un seul champ entier positif. J'ai actuellement des rangées avec des identifiants de [1, 2, 3, 4, 5, 8, 12, 35]. Y at-il une requête d'insertion que je pourrais écrire qui attribuerait le champ id à l'entier positif unique le plus bas (dans ce cas 6)? Il faudrait le faire de manière atomique, donc il n'y a pas la possibilité que des insertions simultanées s'annulent ou échouent.Insérer le nombre entier positve le plus bas possible de manière atomique dans MySql

+4

Puis-je vous demander pourquoi vous devez faire cela? Vous ne pensez pas à réutiliser les ID des éléments supprimés êtes-vous? –

+0

Ceci est un cas simplifié, mais il est analogue à 20 étant le numéro préféré de quelqu'un, donc ils veulent l'utiliser comme leur id. Je voudrais utiliser 1-19 au lieu de l'auto-incrémentation à 21 prochaines. –

Répondre

1

Je pas Utilisez cette option pour remplir "manquants" ids, mais cela devrait fonctionner:

Insert Into t (id) 
    Select Coalesce(Min(t.id) + 1, 0) 
    From t 
    Left Join t As t2 On (t2.id = t.id + 1) 
    Where t2.id Is Null 

Obtenez tous les id s où id + 1 n'existe pas (Left Join) et insérez Min(id)+1 ou 0 si non disponible.

Questions connexes