sql >> Database >  >> RDS >> Mysql

Is join insert/update op MySQL een atomaire operatie?

Ik begrijp uw vraag als "is elk van die vragen op zich een atomaire operatie?". Dan is het antwoord "ja". De andere twee antwoorden zijn juist, als ze zeggen dat al je uitspraken samen niet atomair zijn.

Atomiciteit in databases betekent alleen alles of niets. Het betekent niet juistheid van gegevens. Je stelling slaagt of niet. Het heeft niets te maken met joins of subquery's. Eén statement is één statement, het maakt niet uit of je database een tijdelijke tabel in het geheugen of op schijf moet gebruiken of niet.

Transacties vertellen uw database gewoon om meerdere verklaringen als één verklaring te behandelen. Als een van de instructies mislukt, worden ze allemaal teruggedraaid.

Een belangrijk gerelateerd onderwerp hier is het isolatieniveau . Misschien wil je daar meer over lezen.

BEWERKEN (om de opmerking te beantwoorden):

Klopt. Zolang het een geldige verklaring is en er geen stroomstoring optreedt of andere redenen waarom een ​​query zou kunnen mislukken, wordt deze uitgevoerd. Atomiciteit op zich garandeert alleen maar dat de verklaring (en) wordt/worden gedaan of niet. Het garandeert volledigheid en dat gegevens niet corrupt zijn (doordat een schrijfbewerking niet is voltooid of zoiets). Het biedt geen garantie voor de juistheid van gegevens. Gegeven een zoekopdracht als INSERT INTO foo SELECT MAX(id) + 1 FROM bar; je moet ervoor zorgen door het juiste isolatieniveau in te stellen , dat je geen phantom reads krijgt of zo.



  1. psycopg2.OperationalError:FATAL:niet-ondersteund frontend-protocol 1234.5679:server ondersteunt 2.0 tot 3.0

  2. Hoe gegevens selecteren uit een tabel waarin de tabelnaam spaties bevat?

  3. SQL Meerdere tabellen tegelijk maken

  4. Wat is MariaDB? Hoe werkt MariaDB?