Moin!
Hello Sven,
ist Bullshit!
Das ist schon interessant, wie Du einen Beitrag zur passenden Fragetechnik als "Bullshit" klassifizierst. Ich kann mich an Postings erinnern, in denen Du zuerst nach dem Datenbanksystem gefragt hast.
Das stellt sich nur so dar, wenn man mein Zitat aus dem Zusammenhang reißt.
Wie unzweifelhaft nachzulesen ist, kritisiere ich die Kritik ("Unverschämtheit") an der Antwort als Unverschämtheit, und die inhaltliche Einlassung auf die gestellte Frage als Bullshit.
Es ist doch keinesfalls in jedem Datenbanksytem notwenig, immer gleich eine "Transaktion" zu starten. Es soll - meiner Erkenntnis nach - sogar Datenbanksystem geben, die die referenzielle Integrität, um die es hier augenscheinlich geht, von Haus aus unterstützten.
Es ist gefragt:
- Ich starte eine Transaktion.
- Die last_insert_id() vom ersten INSERT merke ich mir.
- Verwende sie für weitere INSERTs.
- Dann ein COMMIT.
- Ändert sich bei dieser Aktion eventuell die ID vom ersten INSERT so, dass die weiteren INSERTs das mitbekommen sollten, aber nicht tun?
* Nachfragen... *
- DBMS ist MySQL 5
In dieser Situation _kann_ man natürlich antworten: "Du brauchst überhaupt keine Transaktion, weil du ja kaum Traffic hast, der Query nur einmal im Monat standalone ausgeführt wird, und bei IrgendwasSQL werden sie auch garnicht unterstützt, also was reden wir hier - speichere doch direkt in eine Textdatei, dann brauchst du nichtmal die ID!"
Da wird dann das Statement (der Request), nebst automatisch ausgeführter Sub-Statements ohnehin gekaplselt.
Das ist genau der Punkt, den ich beantwortet habe, den du aber anscheinend übersehen hast:
INSERT INTO a SET name = "foo";
x = SELECT last_insert_id();
INSERT INTO b SET friend = "bar", a_id = x;
INSERT INTO b set friend = "baz", a_id = x;
Diese Abfolge kann man mit und ohne Transaktion ausführen.
Ohne Transaktion gibt es einen Zeitraum, in dem "foo" für den Rest der Datenbankwelt ohne Freunde dasteht, oder nur "bar" als Freund hat.
Ich finde es absolut nicht verkehrt, sich darüber Gedanken zu machen.
Zumal das Starten einer Transaktion auch verhindert, dass die DB dreimal einzelne Schreibzugriffe wirksam werden lassen muss. Zumindest der Schreibzugriff auf "b" meines Beispiels wird aggregiert werden und ZWEI Einträge gleichzeitig abarbeiten, nicht zweimal nur einen.
Die Rückfrage von Gerd, ob es sich hier um gebundene Statements oder um mehrere Roundturns zum selben Datenbank-Szenario in einem Webumfeld (in diesem Kontext befindet sich schließlich unser Forum) handelt, empfinde ich als absolut legitim und keinesfalls als "Bullshit".
Wie gesagt: Die Rückfragen habe ich nicht kritisiert. Die Kritik an den Antworten als "Unverschämtheit" kritisiere ich als Unverschämtheit, und die mangelhafte fachliche Qualität des restlichen Antwortversuchs als Bullshit.
Könntest Du bitte zu deiner alten Güte mit der gewohnten Qualität zurückfinden?
Auf Stackoverflow hätte ich Gerd's Antwort als nicht hilfreich abgewertet, dies evtl. entsprechend kommentiert, um meine Ansicht zu erläutern, und vermutlich die Antwort auch als "offensive, abusive or hate speech" geflaggt - Moderatoren hätten sich dann über eine Löschung Gedanken machen müssen. Das sind dort die vorgesehenen Mittel, um mit Nicht-Qualitätsantworten umzugehen.
Hier muss man sich argumentativ mit dem Gegenüber auseinandersetzen - das heißt aber nicht, dass man jegliche Art von schlechten Antworten durchgehen lassen sollte. Fachlich schlechte Antworten, die einfach inhaltlich verbesserungsfähig sind aufgrund mangelnden Wissens oder durch Verbreitung von nicht mehr aktuellen Techniken, kann man tolerieren - also so stehen lassen, ohne dass es zu Verwerfungen im Universum kommt, andere können ja auch bessere inhaltliche Antworten geben.
Toleranz hört bei mir auf, wenn ungerechtfertigt auf der persönlichen Ebene kritisiert wird. Und dies sehe ich hier als gegeben an. Ich empfinde es halt so, dass "Gerd" sich mit seiner "Unverschämtheit"-Antwort auf ein sehr hohes Ross setzt. Er hätte dieses eine Statement aber so stehen lassen können. Stattdessen schießt er sich selbst im hohen Bogen von seinem Ross, indem er dann auch noch eine schlechte fachliche Antwort hinzufügt.
Meine eigene Antwort enthält natürlich dieselben Elemente, allerdings eröffne ich die persönliche Ebene nicht, sondern setze sie fort, und ich versuche, im Sinne des Fragenstellers eine korrekte Antwort zu geben. "Bullshit" verstehe ich in diesem Sinne als pauschal extrem negativ abwertende Kritik am fachlichen Teil - gekennzeichnet durch die Einrahmung des Zitats. Begründung dann nachfolgend.
- Sven Rautenberg