Wenn Sie Vorschläge erhalten und diese implementieren können, verwenden Sie UUIDs.
Die Funktion UUID()
von MySQL gibt einen Wert von 36 Zeichen zurück, der für ID
verwendet werden kann.
Wenn Sie integer verwenden möchten, müssen Sie trotzdem eine Funktion getRandID()
erstellen, die Sie in der INSERT
-Anweisung verwenden. Diese Funktion muss eine zufällige + Überprüfung der vorhandenen IDs verwenden, um eine, die zuvor nicht verwendet wurde, zurückzugeben.
Prüfe RAND()
Funktion für MySQL.
Antwort auf: "Ich möchte diesen Wert verwenden, um zu Base62 zu kodieren und ihn dann für eine ID in einer URL zu verwenden. Wenn ich automatisch inkrementiere, könnte das offensichtlich sein der Benutzer, wie die URL-ID generiert wird. "
Wenn Sicherheit Ihr Ziel ist, dann hilft die Verwendung von Base62 selbst mit einer "zufällig" generierten Nummer nicht.
Eine bessere Option wäre:
AUTO_INCREMENT
Wie Sie die unique_ids erzeugen, ist eine nützliche Frage - aber Sie scheinen eine kontraproduktive Annahme über zu treffen, wenn Sie generieren!
Mein Punkt ist, dass Sie diese eindeutigen IDs zum Zeitpunkt der Erstellung Ihrer Zeilen nicht generieren müssen, da sie im Wesentlichen unabhängig von den eingefügten Daten sind.
Was ich tue, ist die Vorgenerierung eindeutiger IDs für die zukünftige Verwendung. So kann ich mir meine eigene süße Zeit nehmen und absolut garantieren, dass sie einzigartig sind, und es gibt keine Verarbeitung zum Zeitpunkt des Einfügens.
Zum Beispiel habe ich eine Bestellungstabelle mit order_id darin. Diese ID wird im laufenden Betrieb generiert, wenn der Benutzer die Bestellung inkrementell 1,2,3 usw. für immer eingibt. Der Benutzer muss diese interne ID nicht sehen.
Dann habe ich eine andere Tabelle - unique_ids mit (order_id, unique_id). Ich habe eine Routine, die jede Nacht läuft, die diese Tabelle mit genügend unique_id Zeilen vorlädt, um mehr als die Aufträge abzudecken, die in den nächsten 24 Stunden eingefügt werden könnten. (Wenn ich an einem Tag 10000 Bestellungen bekomme, habe ich ein Problem - aber das wäre ein gutes Problem!)
Dieser Ansatz garantiert die Eindeutigkeit und nimmt jede Verarbeitungslast weg von der Einfügetransaktion und in die Stapelroutine, wo sie den Benutzer nicht beeinflusst.
Wie wäre es mit diesem Ansatz ( PHP
und MySQL
):
Kurz
number
für user_id (UNIQUE)
generieren
number
einfügen
Sieht schwer aus? Lesen Sie weiter.
Lang :
Tabelle:
%Vor%Code:
%Vor%user_id
, $min
, $max
) dienen nur der Erläuterung und haben keine statistische Bedeutung. 0.5
und insert_to_table
sind nicht in PHP enthalten. Die sind auch als Zahlen nur zur Erläuterung der Erläuterung. Tags und Links sql mysql primary-key uniqueidentifier