2010-10-28 6 views
0

J'ai cette application CodeIgniter et MySQL.Appliquer la fonction UUID au champ de base de données à partir de PHP

J'ai une table de base de données où un champ doit être unique. Quand je "supprime" un enregistrement de la table je ne veux pas vraiment le retirer de la table, je veux juste libérer la valeur du champ unique afin qu'il puisse être utilisé pour un nouvel enregistrement sans conflit et le laisser Là. Au début, je pensais appliquer une sorte de fonction UUID sur le terrain serait une bonne solution. Quelqu'un peut-il me signaler comment appliquer la fonction UUID au champ à partir du code PHP? J'ai fait des recherches sur Google et je n'ai rien trouvé, les documents de CodeIgniter non plus.

D'autres contraintes sont également les bienvenues et appréciées.

Merci à l'avance!

+0

Vous voulez rendre les UUID réutilisables? Cela a) va à l'encontre de l'idée des UUID et est b) généralement inutile car il n'y a pas de pénurie d'UUID. Ou ai-je mal compris votre question? – deceze

+0

Non, je veux que le champ unique (disons nom d'utilisateur) soit réutilisable en le changeant pour un UUID au moment de la "suppression". De cette façon, l'enregistrement "supprimé" peut rester sur la table et la valeur du nom d'utilisateur peut être réutilisée. – romeroqj

+0

OK, je vois. Cela signifie que vous perdrez l'information dans ce domaine. Qu'en est-il simplement de déplacer l'utilisateur supprimé vers une autre table "archive"? – deceze

Répondre

1

Si je comprends bien votre objectif ici, vous pouvez le faire avec une seule ligne de déclaration SQL.

update users set username = CONCAT(UUID(), username) where username = "username_to_be_deleted" 

C'est tout à fait bonne tentative de garder la contrainte unique, à moins que certains utilisateurs de vos mains méchant a choisi un nom d'utilisateur qui est dans le format d'un identifiant unique + une chaîne de caractères, et il sera accidentaly partie. Peu probable, cependant.

Avantage supplémentaire: comme UUID a un format fixe, vous pouvez toujours extraire le nom d'utilisateur d'origine de la valeur codée.

Et bien sûr, une meilleure approche, si vous n'ajoutez pas une contrainte unique sur un champ comme celui-ci, mais que vous appliquez l'unicité par programmation.

Questions connexes