IceMatrix schrieb:
Die Race Condition könnte genausogut innerhalb eines einzelnen Queries passieren, würde es kein Locking geben.
natürlich, ich möchte eben nur erwähnen, dass es nicht hilft, wenn man MyIsam und mehrere Querys nutzt die aufeinander aufbauen, ich sehe es immerwieder, dass der Fehler gemacht wird.
IceMatrix schrieb:
Die Beschreibung hier klingt für mich nach einem einzelnen SELECT, welches sich alle Daten holt.
ja, hier sollte es kein Problem sein, ich wollte es nur nochmal hervorheben, nicht dass sich "falsches" Wissen einprägt (, dass ein Tabel-Lock für einen Query gegen Race-Conditions hilft)
IceMatrix schrieb:
Sollten es tatsächlich mehrere sein und willst du Race Conditions verhindern, dann musst du InnoDB für alle beteiligten Tabellen wählen und alle Requests als Transaction durchführen.
Das machst du mit START TRANSACTION als ersten Request. Anschließend die eigentlichen Lese- und Schreiboperation und zum Schluss ein COMMIT oder ROLLBACK.
ich weiß
bu1137 schrieb:
InnoDB würde ich mal als Overkill bezeichnen. Wenn du mich fragst, würde es genügen, beim Schreiben/Updaten der Daten die Table per Write-Lock zu sperren.
InnoDB ist nie Overkill, im Gegenteil:
MyISAM zu Nutzen ist fahrlässig !
MyISAM bietet dir zu keiner Sekunde eine Garantie, dass deine Datenbank sicher gespeichert oder konsistent sind.
Schreib mal ein Script, dass kontinuierlich Daten in eine MyISAM-Tabelle schreibt und zieh dann den Stecker des Servers, die Wahrscheinlichkeit, dass du beim Anschalten des Servers korrupte Tabellen hast ist sehr hoch und beim Reparieren gehen dann eventuell Daten verloren.
Bei InnoDB hast du das Problem nie, durch die ACID-Regeln kannst du jederzeit den Stecker ziehen und du wirst nie korrupte Daten haben, einzig eine nicht abgeschlossene Transaktion wird - wie man es erwartet - nie ausgeführt worden sein, diese Garantie bietet dir MyISAM auch nicht, ein UPDATE über eine ganze Tabelle kann die Hälfte Zeilen updaten und dann durch einen Fehler unterbrechen und die andere Hälfte unberührt lassen.
MyISAM ist eine Spielwiese und funktioniert nur so gut, weil man davon ausgeht, dass es keine katastrophalen Fehler gibt !