2010-09-28 5 views
-1

je structure de la table comme ça:Augmentez la valeur au hasard

users 
smf, user_id, group_id, status 

Avec chaque requête la valeur de smf devrait augmenter avec une valeur de courant max + nombre aléatoire.

Voici la requête

INSERT INTO users SELECT(SELECT MAX(smf) + FLOOR(RAND() * 15 from invoices), 0, 0, '1'' 

Ma première question concerne que la façon de maintenir l'intégrité concurrente correcte (max (id) ne peut pas me donner la dernière ligne insérée'ai, car quelqu'un d'autre peut avoir inséré depuis que je l'ai fait).

Ma deuxième question concerne la façon d'obtenir la valeur de FLOOR(RAND() * 15 sans exécuter de seconde requête?

+1

Quelle est la raison pour cela? Êtes-vous concerné quelqu'un pourrait deviner l'ID si vous avez utilisé une simple séquence incrémentante? Pourquoi ne pas utiliser les GUID (s'ils sont disponibles en MySQL)? – FrustratedWithFormsDesigner

Répondre

1

Si votre table possède un champ d'incrémentation automatique, vous pouvez utiliser last_insert_id de mysq pour déterminer votre nouvelle ligne et obtenir la nouvelle valeur. Vous pouvez également générer le nombre aléatoire dans le code avant de l'insérer dans la base de données.