Wie generiere ich eine eindeutige ID in MySQL?
Ich bin die Programmierung ein Skript mit PHP und MySQL und ich will so eine
unique-id (bestehend aus einem string: groß-und klein
Buchstaben mit zahlen) wie: gHYtUUi5b
.
Ich fand viele Funktionen in PHP generieren kann solche zahlen, aber ich fürchte, darüber, wie, um sicherzustellen, die id ist einzigartig!
UPDATE: uuid ist lang, ich meine, solche id ist wie: (P5Dc) 11 alphanumerischen Zeichen.
InformationsquelleAutor der Frage assaqqaf | 2009-09-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einen programmatische Weise werden kann:
Hinweis:
es ist die beste Praxis zu gewährleisten das Feld MUSS EINDEUTIG sein,, mit dem index
InformationsquelleAutor der Antwort drAlberT
Ich UUID (), um einen eindeutigen Wert.
Beispiel:
InformationsquelleAutor der Antwort CSharpAtl
Können Sie gerne die Art, wie wir es tun. Ich wollte eine umkehrbar eindeutige code, der aussah, "random" -ein Recht häufiges problem.
Wir haben jetzt eine Zahl, die variiert Wild zwischen calls und ist garantiert weniger als 10,000,000,000. Kein schlechter start.
Der Grund für die Wahl Basis 34 ist, so dass wir nicht befürchten, 0/O und 1/l-Kollisionen. Jetzt haben Sie eine kurze random-suchen-Taste, die Sie verwenden können, um eine LANGE Datenbank-id.
InformationsquelleAutor der Antwort RJStanford
Wie generieren Sie die unique_ids ist eine sinnvolle Frage - aber Sie zu sein scheinen, kontraproduktiv Annahme über wenn Sie erzeugen Sie!
Mein Punkt ist, dass Sie nicht brauchen, zu generieren, diese einzigartigen id ' s zu der Zeit der Erstellung Ihrer Reihen, weil Sie im wesentlichen unabhängig von den Daten eingefügt werden.
Was ich tun müssen, ist vorab eine eindeutige id für die zukünftige Verwendung, so kann ich nehme meine eigene süße Zeit und absolut garantieren, Sie sind einzigartig, und es gibt keine Bearbeitung erfolgen an der Zeit einfügen.
Zum Beispiel ich habe eine Tabelle Bestellungen mit order_id. Diese id wird dynamisch generiert, wenn der Benutzer die Reihenfolge, schrittweise 1,2,3 usw. immer. Der Benutzer braucht nicht zu sehen, diese interne id.
Dann habe ich noch eine Tabelle - unique_ids mit (order_id, unique_id). Ich habe eine routine, die ausgeführt wird, die jede Nacht vor und lädt diese Tabelle mit genug unique_id Zeilen, um mehr als decken die Aufträge, die möglicherweise eingefügt werden in den nächsten 24 Stunden. (Wenn ich jemals in 10000 Bestellungen an einem Tag werde ich ein problem haben - aber das wäre ein gutes problem zu haben!)
Dieser Ansatz garantiert Einzigartigkeit und nimmt eine etwaige Verarbeitung der Belastung Weg von den insert-Transaktion und in die batch-routine, wo es keinen Einfluss auf die Benutzer.
InformationsquelleAutor der Antwort Rob Beer
Verwenden Die UUID-Funktion.
Ich weiß nicht, die Quelle Ihrer Prozeduren in PHP, die eindeutige Werte generiert. Wenn es der Bibliothek-Funktion soll garantieren, dass dein Wert ist wirklich einzigartig. Überprüfen Sie in der Dokumentation. Sie sollten, hovewer, verwenden Sie diese Funktion die ganze Zeit. Wenn Sie, zum Beispiel, unter Verwendung der PHP-Funktion zum generieren von eindeutigen Wert, und dann entscheiden Sie für die Verwendung von MySQL-Funktion haben, können Sie Wert generieren, die bereits existieren. In diesem Fall setzen EINDEUTIGEN INDEX auf die Spalte ist ebenfalls eine gute Idee.
InformationsquelleAutor der Antwort Lukasz Lysik
Wenn Sie MySQL mit einer version größer 5.7.4, die Sie verwenden können, die neu Hinzugefügt RANDOM_BYTES Funktion:
Ist das Ergebnis eine zufällige Zeichenfolge wie
GgwEvafNLWQ3+ockEST00A==
.InformationsquelleAutor der Antwort zah
Eindeutigkeit, was ich Tue, nehme ich den Unix-timestamp und fügen Sie eine zufällige Zeichenfolge, um es und verwenden.
InformationsquelleAutor der Antwort Sabeen Malik
Und rufen Sie die gespeicherte Prozedur wie GenerateUniqueValue('tableName','columnName'). Dies wird Ihnen eine 8-stellige einmalige Charakter jedes mal.
InformationsquelleAutor der Antwort Hariramprasath Nandhagopalan
Unten ist nur für Referenz-numerische eindeutige Zufalls-id...
kann es helfen, Sie...
und Sie können hinzufügen char mit dem code wie ->
$rand=mt_rand(10000,999999) .$randomchar; //assume $radomchar contains char;
InformationsquelleAutor der Antwort Aravinth
Sie sollten auch mit
crypt()
* zu generieren [fast-garantierte] eindeutige ID innerhalb Ihrer Constraints.InformationsquelleAutor der Antwort warren
InformationsquelleAutor der Antwort imran khan
crypt()
wie vorgeschlagen und speichern Salz in irgendeiner Konfigurations-Datei, Starten Sie das Salz von 1-und wenn Sie feststellen, duplizieren, verschieben auf nächsten Wert 2. Sie kann mit 2 chars, aber das wird Ihnen genug Kombination für Salz.Erzeugen können Sie string aus
openssl_random_pseudo_bytes(8)
. So sollten zufällige und kurze string (11 char) bei der Ausführung mitcrypt()
.Salz vom Ergebnis und es werden nur 11 chars, das sollte genug sein, zufällig für 100+ Millionen, wenn Sie ändern Sie das Salz auf der jeder Fehler von random.
InformationsquelleAutor der Antwort gorrc
Dieser generiert zufällige ids:
InformationsquelleAutor der Antwort Steven Garcia