MySql Insert Select uuid()
Sagen, Sie haben eine Tabelle:
`item`
Feldern:
`id` VARCHAR( 36 ) NOT NULL
,`order` BIGINT UNSIGNED NOT NULL
Und:
Unique(`id`)
Und Sie rufen:
INSERT INTO `item` (
`item`.`id`,`item`.`order`
) SELECT uuid(), `item`.`order`+1
MySql fügen Sie die gleiche uuid in alle neu erstellten Zeilen.
Also, wenn Sie beginnen mit:
aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa, 0
bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb, 1
Werden Sie am Ende mit:
aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa, 0
bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb, 1
cccccccc-cccc-cccc-cccc-cccccccccccc, 1
cccccccc-cccc-cccc-cccc-cccccccccccc, 2
Wie kann ich den Befehl MySql zu erstellen, die eine andere uuid für jede Zeile?
Ich weiß, dass das folgende funktioniert wie erwartet in MSSQL:
INSERT INTO item (
id,[order]
) SELECT newid(), [order]+1
n.b. Ich weiß, ich könnte WÄHLEN Sie die Ergebnisse, eine Schleife und eine separate INSERT-Befehl für jede Zeile aus meinem PHP-code, aber ich nicht wollen, das zu tun. Ich möchte, dass die Arbeit getan werden auf dem Datenbank-server, wo es gemacht werden soll.
Sie wissen, was Sie auto_increment ist ?
Sind Sie sicher, es ist die Rückkehr der exakt gleichen Wert für jede Zeile? Ich würde erwarten, dass die meisten der Charaktere werden die gleichen in jedem Wert, wenn Sie anrufen, UUID (), also Scannen optisch, Sie sehen das gleiche, aber jeder wird immer noch einzigartig, wenn man genau hinschaut.
Sind Sie sicher? Ich habe versucht, einen ähnlichen test-ich habe unterschiedliche UUIDs.
Sind Sie sicher, es ist die Rückkehr der exakt gleichen Wert für jede Zeile? Ich würde erwarten, dass die meisten der Charaktere werden die gleichen in jedem Wert, wenn Sie anrufen, UUID (), also Scannen optisch, Sie sehen das gleiche, aber jeder wird immer noch einzigartig, wenn man genau hinschaut.
Sind Sie sicher? Ich habe versucht, einen ähnlichen test-ich habe unterschiedliche UUIDs.
InformationsquelleAutor Richard | 2011-06-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Stellt sich heraus, uuid() ist generieren eine andere uuid pro Zeile.
Aber statt Generierung aller chunks zufällig, als ich normalerweise erwarten würde, MySql scheint nur die Erzeugung der 2. chunk zufällig. Vermutlich um noch effizienter zu werden.
So auf einen Blick die uuids identisch zu sein scheinen, wenn in der Tat MySql verändert hat, 2. Stück. z.B.
Ich nehme an, wenn es zu einer Kollision wäre es nochmal versuchen.
Mein bad.
Auch die Chancen, dass es jemals zu einer Kollision effektiv null (weil die Zeit, die verbundene element bei dieser Art der Generierung der UUID), aber wenn es jemals zu einer Kollision wäre es nicht abgeholt werden, weil Sie nicht mit Schlüsseln, die auf Ihren Feldern.
InformationsquelleAutor Richard
MySQL nicht zulassen, Ausdrücken als default-Wert. Umgehen kannst du dies, indem auf das Feld null sein. Dann hinzufügen von insert - /update-Trigger, die, wenn der Wert null ist, setzen Sie das Feld auf uuid().
InformationsquelleAutor Denis de Bernardy
Versuchen Sie es bitte mit
MID(UUID(),1,36)
anstelle von uuid().InformationsquelleAutor Lâm Nguyễn
MySQL-UUID () - Funktion generiert V1 UUIDs, die Aufteilung in Zeit -, Ablauf-und Knoten-Felder. Wenn rufen Sie es auf einem einzelnen Knoten, nur ein paar bits im Feld Zeit unterschiedlich sein werden; dies wird als bezeichnet die zeitliche Einzigartigkeit. Wenn Sie es nennen, die auf verschiedenen Knoten an der exakt gleichen Zeit, den Knoten Felder unterschiedlich sein werden; dies wird als bezeichnet die räumliche Eindeutigkeit. Die Kombination der beiden ist sehr mächtig und gibt eine Garantie der universellen Einzigartigkeit, aber auch Lecks Informationen über das Wann und wo jeder V1 UUID erstellt wurde, das kann ein Sicherheitsproblem. Oops.
V4 UUIDs sind im Allgemeinen mehr populär jetzt, weil Sie-hash, der die Daten (und mehr) zusammen und sind von daher nicht Leck in nichts, aber Sie müssen eine andere Funktion, um Sie zu bekommen--und hütet Euch vor dem, was Sie tun werden, um die Leistung wenn Sie hohe INSERT-Volumen; MySQL (zumindest jetzt) nicht sehr gut bei der Indizierung von (pseudo -) zufällige Werte, das ist der Grund, warum V1 ist, was Sie zu geben Sie.
InformationsquelleAutor StephenS
Erzeugen zunächst ein uniq-string mit die php uniqid () - Funktion
und einfügen, um das Feld ID.
InformationsquelleAutor HYDER ALI