phpbar.de logo

Mailinglisten-Archive

Re: SEQUENCE-Funktionalität
Archiv Mailingliste mysql-de

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: SEQUENCE-Funktionalität



-----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-----


Home | Main Index | Thread Index

php::bar PHP Wiki   -   Listenarchive