Hello,
Bei dieser Problematik geht es ein wenig ins Datenbankphilosophische.
Du verwirrst die Leute hier.
Denk bitte nochmal drüber nach, was der Sinn der eigentlichen Frage war.
https://forum.selfhtml.org/?t=145409&m=943676
Karl hat sehr genau beschrieben, was sein Anliegen ist.
Eine Lösung ist hierfür die von mir beschriebene
https://forum.selfhtml.org/?t=145409&m=943684
- Tabelle sperren
- Table-Status abfragen
- Next-Insert-ID holen
- Namen bilden für externe Daten
- Datensatz eintragen
- Tabelle entsperren
Ich habe ihm geantwortet, dass das ein Performance-Killer ist.
Außerdem haben "normale User" in üblichen Einrichtungen selten das LOCK TABLES Recht.
Das liegt aber daran, dass die "Administratoren" damit selten etwas anfangen können.
Alternativ habe ich ihm empfohlen, mittels LAST_INSERT_ID() zu arbeiten.
Und nun werde ich noch den Denkfehler beseitigen, den Karl mit dem Zeitverhalten seiner Anwendung hat:
- Datensatz mit MP3 hochladen
(Daten befinden sich nun in der Transfer-Area von PHP = im Temp-Verzeichnis) - mit dem temp-File arbeiten, um z.B. die Kopfdaten auszulesen
- Datensatz zusammenstellen
(Achtung: auf eichtiges Escaping für die Datenbank achten) - Datensatz abspeichern (mit Sperrvermerk oder Lock ausschließlich für den _Datensatz_)
- Last-Insert-Id holen
- Namen bilden für externe Daten (prüfen, ob der schon vorhanden ist?)
- File aus dem Temp-File unter dem verifizierten Namen abspeichern
- Update auf die DB, um den Sperrvermerk zu entfernen oder Unlock Record
Diese Lösung ist performant.
Sie benötigt keine Datei-Sperren.
Sie berücksichtigt die Write-Write-Lücke zwíschen den abhängigen Daten.
Wenn nämlich ein anderer Besucher den Datensatz aus der DB lesen würde, bevor die Datei wirklich abgespeichert wurde, würde sein MP3 leer sein, bzw. es gäbe einen File-Read-Error.
Harzliche Grüße vom Berg
http://www.annerschbarrich.de
Tom
Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
Nur selber lernen macht schlau