Mailinglisten-Archive |
Mark Arnold wrote: > > 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 Hallo Mark Entschuldige, aber Alex setzt auf AUTO_INCREMENT auf. Dabei wird zuerst ein neuer Wert in die Tabelle geschrieben, und dann mit LAST_INSERT_ID wieder ausgelesen. Das ist Threadsave. Tschau Christian
php::bar PHP Wiki - Listenarchive