Mailinglisten-Archive |
Hi, Alex Killing schrieb: > > Hallo. > > > > > Gibt es bei mySQL eine SEQUENCE-Funktionalität wie bei Postgres, die die > > Verwaltung einer systemweit eindeutigen GUID (global unique ID) erlaubt, > ---------- (= Datenbank-weit ?) > > oder muß man so etwas durch irgendwelche Tricks (Sekunden siet 1970 + > > Prozess-ID des laufenden Prozesses) nachbilden? > > > > Es gibt zwar das AUTO_INCREMENT-Feature, das jedoch immer nur > > tabellenweit eindeutig ist und außerdem IDs in Sonderfällen (Löschen des > > Datensatzes mit der höchsten ID) wiederverwendet. > > Meines Wissens nicht. Mach doch einfach eine Tabelle "guidtab" in der > nur ein Autoincrement-Feld drin ist und benutze die zum erstellen Deiner > GUID. Dann schreibst Du dir eine Funktion get_next_guid() in der dort > ein Eintrag gemacht wird und die GUID zurückgibt. In php oder perl ein > Dreizeiler, oder hab ich da was übersehen ? > Leider ja: Zwei Benutzer wollen einen neuen Datensatz anlegen. Der erste holt sich eine neue ID. Noch bevor sein Programm den neuen Eintrag in die Datenbank schreibt und die ID-Tabelle aktualisiert hat, holt sich User 2 eine neue ID, die aber noch die gleiche ist, die auch User 1 bekommen hat. In diesem Fall werden zwei neue Datensätze angelegt, die die gleiche ID haben, und es gibt einen Fehler. Ich kann auch nicht den Datensatz ohne ID speichern und dann schauen, welche ID er zugewiesen bekam. Hier tritt das gleiche Problem auf: Bevor die ID abgefragt werden kann, wird noch ein neuer Datensatz angelegt und ich bekomme die falsche ID zurück. MARK
php::bar PHP Wiki - Listenarchive