Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Ist Join Insert/Update auf MySQL eine atomare Operation?

Ich verstehe Ihre Frage wie "Ist jede dieser Abfragen an sich eine atomare Operation?". Dann ist die Antwort "Ja". Die anderen beiden Antworten sind richtig, wenn sie sagen, dass alle Ihre Aussagen zusammen nicht atomar sind.

Atomizität in Datenbanken bedeutet nur alles oder nichts. Es bedeutet nicht Korrektheit der Daten. Ihre Aussage gelingt oder nicht. Es hat nichts mit Verknüpfungen oder Unterabfragen zu tun. Eine Anweisung ist eine Anweisung, unabhängig davon, ob Ihre Datenbank eine temporäre Tabelle im Speicher oder auf der Festplatte verwenden muss oder nicht.

Transaktionen weisen Ihre Datenbank lediglich an, mehrere Anweisungen als eine Anweisung zu behandeln. Wenn eine der Anweisungen fehlschlägt, werden alle zurückgesetzt.

Ein wichtiges verwandtes Thema hier ist die Isolationsstufe . Vielleicht möchten Sie sich darüber informieren.

EDIT (um den Kommentar zu beantworten):

Das stimmt. Solange es sich um eine gültige Anweisung handelt und kein Stromausfall auftritt oder andere Gründe, warum eine Abfrage fehlschlagen könnte, wird sie ausgeführt. Die Atomarität an sich garantiert nur, dass die Aussage(n) gemacht wird/werden oder nicht. Es garantiert Vollständigkeit und dass Daten nicht beschädigt sind (weil ein Schreibvorgang nicht abgeschlossen wurde oder so). Es garantiert Ihnen nicht die Richtigkeit der Daten. Bei einer Abfrage wie INSERT INTO foo SELECT MAX(id) + 1 FROM bar; Sie müssen sicherstellen, dass Sie die richtige Isolationsstufe einstellen , dass Sie keine Phantomauslesungen oder ähnliches erhalten.