Mailinglisten-Archive |
-----BEGIN PGP SIGNED MESSAGE----- On Wed, 17 Mar 1999, 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. > Gluecklicherweise nicht (mail aus der englischen Liste): Oliver> On Sun, 14 Mar 1999, Tauren Mills wrote: >> >> >> After reading the manual, I have a question about Auto-Increment... >> >> The manual says that I can use this query to find out the value of the most >> recent AUTO_INCREMENT field: >> >> SELECT * FROM tbl_name WHERE auto_col IS NULL >> Oliver> Lock the table before your INSERT and SELECT statement. Another way is to Oliver> stamp the rows yourself, e.g. functions related to RPC. Oliver> oli. Hi! No, there is no need to lock the rows in the above case. The above query is automaticly transformed to: SELECT * FROM tbl_name WHERE auto_col = LAST_INSERT_ID() and the LAST_INSERT_ID() variable is thread safe (will not be affected by other clients) Regards, Monty - ----------------------------------------------------------------------- Oliver Artelt Jordanstr.7, 39112 Magdeburg mailto:oli_(at)_cubeoffice.de Tel: 0391-6112827 Fax: 0391-604243 - ----------------------------------------------------------------------- http://www.transnet.de ISP: Wir schaffen Verbindungen! http://www.magdeburg-online.de Die Magdeburger Online-Information - ----------------------------------------------------------------------- -----BEGIN PGP SIGNATURE----- Version: 2.6.3i Charset: noconv iQCVAwUBNu/01f5e/rfn+ii1AQFsUQP+OQicJZ+Q/40VL6f6hyPqVU/Xmr8bpmCa Dhz8d/fkWsf+49Km+0Tw55yJPvsnrOQCvH/YK/BSBBESFF19Drlxgir/IzvEV1sb zjdiUPAqV1rFDifcJGUdWM6Q3D81Eh88edZ3FvbGjehe3raYcXxfSMfT+PKi/4dw cjaOPYx4cnE= =98ML -----END PGP SIGNATURE-----
php::bar PHP Wiki - Listenarchive