2009-06-01 8 views
1

Quelle est la manière la plus simple d'effectuer les opérations suivantes dans MySQL 5.1?Réaffectation aléatoire des valeurs d'une table PK

J'ai une table avec une clé primaire sous la forme d'un entier, actuellement en cours d'exécution de 1 à 220. Le PK s'exécute séquentiellement en fonction de l'ordre dans lequel les lignes ont été écrites dans la table. Je veux être en mesure de réaffecter aléatoirement cette valeur de clé primaire, de sorte que, par exemple, la ligne 1 (avec un PK de 1 actuellement) devient 19 (par exemple), la ligne 2 devient 142 (par exemple), ligne 3 devient 99 (par exemple), etc. et ainsi de suite afin que tous les nombres compris entre 1 et 220 soient réaffectés au PK.

Existe-t-il un moyen simple de le faire?

Merci, Tim

Répondre

0

Mettre à jour la clé primaire avec le Rand Function. Pour obtenir un nombre entier, il faudrait le multiplier par 100, 1000, etc. (en fonction de la taille du nombre voulu), puis tronquer le nombre décimal restant. Votre script, que je suppose que vous écririez pour le faire, devrait s'assurer qu'un nombre en double n'a pas été généré et qu'une tentative de mise à jour a échoué. Je ferais cela via une boucle, une seule instruction de mise à jour ne fonctionnerait pas à cause du fonctionnement de Rand. (Au moins pour les autres SGBDR)

Est-il important que nous connaissions la raison pour laquelle vous faites cela? La raison pourrait changer ma réponse ...

+0

Merci pour votre réponse. Je me demandais s'il y avait un moyen plus efficace, comme dans la 220ème itération, il y aurait 219/220 probabilité de toucher un nombre déjà généré ... La raison pour laquelle je veux faire ceci est que je veux que les données apparaissent pas dans l'ordre dans lequel il a été entré, mais au hasard. Remerciements –

2

Il n'y a pas de façon simple de le faire entièrement dans SQL. (Il y a très probablement une manière complexe qui n'en vaut pas la peine.) Je vous recommande d'en faire la responsabilité de la logique au niveau de l'application.

Je vous recommande également d'utiliser une clé unique secondaire à la place de la clé primaire si vous souhaitez utiliser un type de carte à la place de la clé primaire.

+0

+1 Utilisation d'un PK pour quelque chose pour lequel il n'était pas prévu. – dkretz

0

Vous souhaitez attribuer une valeur aléatoire à la colonne ID, puis trier par celle-ci et réaffecter l'ID en fonction de la position dans les lignes triées.

Questions connexes