Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Zeitlich geblockte Anweisungen

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von hapyr, 25 November 2016.

  1. hapyr

    hapyr Benutzer

    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
     
  2. Verwende einfach den korrekten Datentyp. Dann passt alles.
     
  3. hapyr

    hapyr Benutzer

    Ja danke für die Antwort aber ein wenig konkreter fände ich schon nett?! ... Meinst du ein int mit auto_increment!?
     
  4. akretschmer

    akretschmer Datenbank-Guru

    In PostgreSQL wäre es ein SERIAL, in MySQL könnte es das sein, was Du sagst.
     
  5. hapyr

    hapyr Benutzer

    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 :)
     
  6. akretschmer

    akretschmer Datenbank-Guru

    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=*#
    
     
  7. hapyr

    hapyr Benutzer

    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
     
  8. Ja. Deine Angst ist unbegründet.
     
  9. akretschmer

    akretschmer Datenbank-Guru

    Sequencen (oder das Pedant bei MySQL) wurden extra dafür geschaffen für das, was Du suchst. Die DB stellt sicher, daß alles korrekt abläuft. Vertrau einfach drauf, und versuche nicht, schlauer als die DB zu sein. Das wird Dir kaum gelingen.
     
  10. hapyr

    hapyr Benutzer

    Haha okay ich will aber die Macht über die Maschine :D ... aber Danke an der Stelle nochmal...
     
  11. akretschmer

    akretschmer Datenbank-Guru

    Dafür gäbe es bessere Alternativen zu MySQL.
     
Die Seite wird geladen...
Ähnliche Themen - Zeitlich geblockte Anweisungen
  1. hightower1981
    Antworten:
    8
    Aufrufe:
    1.387

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden