Datenschutz My SQL

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Datenschutz My SQL

    Hallo,

    ich hätte da ein kleines Problem!

    Bsp.:

    Ich habe zwei Tabellen. Eine Haupttabelle "A" und eine andere Tabelle "B".
    Wenn ich einen Datensatz in Tabelle "A" eintrage wird eine Id automatisch erzeugt. Diese automatisch erzeugte Id soll nach einer erneuten "insert" Anweisung in die Tabelle "B" geschrieben werden.

    Theorie:
    Sollten jetzt zwei Leute "gleichzeitig" einen neuen Datensatz in Tabelle "A" einfügen, kann mein Programm die Id's aus Tabelle "A" nicht richtig in die Tabelle "B" einfügen, da ich nur nach der maximum Id aus der Tabelle "A"
    frage. Die vorletzte Id aus der Tabelle "A" würde beim eintragen in die Tabelle "B" einfach unterschlagen werden.


    Bisheriger Quelltext:
    //Datensatz in Tabelle "A" einfügen
    INSERT INTO Tabelle_A (id, datensaetze)
    VALUES ('',sfghsfgh);

    //Welche id hat die DB erzeugt?
    SELECT max(id) from Tabelle_A

    //Den max(Wert) mit den entsprechenden Datensätzen in die
    //Tabelle B Speicher
    INSERT INTO Tabelle_B (id(aus der Tabelle "A"), datensaetze)
    VALUES ('',sfghsfgh);

    Die Wahrscheinlichkeit ist zwar ziemlich gering, dass zwei Leute gleichzeitig speichern, erhöht sich aber mit der Anzahl der User.

    Gibt es eine Möglichkeit dem Vorzubeugen. Zum Beispiel die Tabelle "A" sperren während meine Speicherfunktion läuft oder die neue Id aus der der Tabelle A irgendwie schon vor der Speicherung reservieren????

    Alle Vorschläge an mich!!!
    Danke im Voraus!

    Gruß Wegalt

  • #2
    //Welche id hat die DB erzeugt?
    SELECT max(id) from Tabelle_A
    ich würde das mal richtig machen...
    SELECT LAST_INSERT_ID() from Tabelle_A

    http://www.mysql.com/doc/en/example-Foreign_keys.html

    davon abgesehen, kann man mit der PHP-fkt mysql_insert_id() auch die letzte vergebene id finden. es muss ja nicht zwangsläufig die höchste sein...

    nun zu deiner eigentlichen frage.

    meines wissen ist die erkennung der höchsten id auch noch connection-abhängig.

    zwei user -> zweimal scriptaufruf -> zwei connections

    damit solltest du also kein problem haben. MAX(id) wäre nur ein problem gewesen.

    eine andere zusätzliche variante wäre, dass du die tabelle zwischendurch für INSERT/UPDATE sperrst. SELECT geht noch, aber man kann keine daten verändert und/oder hinzufügen.

    http://www.mysql.com/doc/en/LOCK_TABLES.html
    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


    Kommentar

    Lädt...
    X