Zeitlich geblockte Anweisungen

hapyr

Benutzer
Beiträge
5
Hallo hallo,
ich arbeite an einer App bei welcher jeder user beim erststart eine eindeutige ID bekommen soll.
Jetzt möchte ich das gerne so lösen das ich eine Tabelle habe mit einer Spalte (userid) die immer höchzählt.

Immer wenn ein User die App das erstemal startet wird die höchste userid abgefragt um 1 erhöht und wieder abgespeichert...

Aber was passiert wenn 2 Leute gleichzeitig abfragen?! Dann hätten 2 Personen die gleiche id und das soll ja nicht.

Kann ich irgendwie Anweisung blockweise übergeben damit der Server erst einen Block und dann den nächsten Block bearbeitet?!

Liebe Grüße
 
Werbung:
ja okay...
aber das glaube ich funktioniert nicht.... Ich meiner ich habe 2 Zeilen Code abfrage/anfrage:
z.B.: (time sei die userid variable)
-----> SELECT time FROM user_id; (time wird jetzt intern verwendet um eindeutige zuordnung zu machen)
-----> INSER INTO user_id VALUES(time+1);

Wenn jetzt jemand auch den ersten befehl ausführt wärend ich den 2. noch nicht ausgeführt habe... dann wäre die ID variable doppelt abgefragt und in der App gespeichert...

Vielleicht versteht jetzt jemand was ich meine
Liebe Grüße :)
 
Mir scheint, Du hast das Gundkonzept noch nicht verstanden.

Code:
test=# create table hapyr(id serial primary key, name text);
CREATE TABLE
test=*# insert into hapyr (name) values('Andreas');
INSERT 0 1
test=*# insert into hapyr (name) values('Liselotte');
INSERT 0 1
test=*# insert into hapyr (name) values('Gunnar');
INSERT 0 1
test=*# select * from hapyr;
 id |  name   
----+-----------
  1 | Andreas
  2 | Liselotte
  3 | Gunnar
(3 Zeilen)

test=*#
 
Danke für deine Antwort... Doch ich glaube ich hab es schon verstanden... Also das der (bei dir SERIAL ) automatisch hochzählt beim insert von daten... Das ist ja gut und schön aber das ändert ja nicht daran das 2 Leute gleichzeitig bei einer Abfrage den gleichen wert bekommen. Das ist das was für mich entscheidend ist.

Vielleicht nochmal veranschaulicht...

Wenn meine App gestartet wird passiert folgendes:
-----> SELECT time FROM user_id; (time wird jetzt intern verwendet um eindeutige zuordnung zu machen)
-----> INSER INTO user_id VALUES(time+1);

Wenn jetzt gleichzeitig ein anderer User auch die App startet und den ersten Befehl ausführt bevor ich den 2. ausgeführt habe wird zwar time um 2 erhöht aber beide user haben die selbe userid...

oder mach ich da ein denkfehler??!
Liebe Grüße
 
Danke für deine Antwort... Doch ich glaube ich hab es schon verstanden... Also das der (bei dir SERIAL ) automatisch hochzählt beim insert von daten... Das ist ja gut und schön aber das ändert ja nicht daran das 2 Leute gleichzeitig bei einer Abfrage den gleichen wert bekommen. Das ist das was für mich entscheidend ist.

Vielleicht nochmal veranschaulicht...

Wenn meine App gestartet wird passiert folgendes:
-----> SELECT time FROM user_id; (time wird jetzt intern verwendet um eindeutige zuordnung zu machen)
-----> INSER INTO user_id VALUES(time+1);

Wenn jetzt gleichzeitig ein anderer User auch die App startet und den ersten Befehl ausführt bevor ich den 2. ausgeführt habe wird zwar time um 2 erhöht aber beide user haben die selbe userid...

oder mach ich da ein denkfehler??!
Liebe Grüße

Ja. Deine Angst ist unbegründet.
 
Werbung:
Zurück
Oben