Vinzenz Mai: Sperrt lock tables auch zum lesen?

Beitrag lesen

Hallo,

ich muß, um einen Wert zu generieren, aus einer Tabelle den Datensatz mit der höchsten ID ermitteln, dann den eine Spalte hernehnen, per explode (php) zerhacken, auf Basis der Zerhackten einen neuen Wert generieren und dann einen neuen Datensatz in die Tabelle einfügen.

das sieht ganz danach aus, als wäre das Datenbankdesign sehr fehlerhaft. Für solche Aufgaben gibt es je nach DBMS Autoincrement, Sequenzen, Identity-Spalten, ...

Wenn man Werte aus Spalten "zerhacken" muss, um an gewünschte Werte zu kommen, hat man Daten nicht atomar gespeichert. Das ist fast immer keine gute Idee.

Wie verhindere ich sinnvoll, dass an Stelle XYZ ein weiterer User genau dasselbe macht und so ein Wert doppelt eingetragen wird?

Ist hierfür Lock Tables das richtige Instrument?

Refactoring der Anwendung wäre das richtige Instrument. Ein Write-Lock ein Workaround, um die selbstfabrizierte TOCTTOU-Problem zu verhindern. Solche Sperren sind eine wunderbare Performance-Bremse.

Freundliche Grüße

Vinzenz