sql >> Databasteknik >  >> RDS >> Mysql

Är join insert/update på MySQL en atomär operation?

Jag förstår din fråga som "är var och en av dessa frågor i sig en atomär operation?". Då är svaret "ja". De andra två svaren är rätt, när de säger att alla dina påståenden tillsammans inte är atomära.

Atomicitet i databaser enbart betyder allt eller inget. Det betyder inte uppgifternas korrekthet. Ditt uttalande lyckas eller inte. Det har ingenting att göra med anslutningar eller underfrågor. En sats är en sats, oavsett om din databas måste använda en temporär tabell i minnet eller på disk eller inte.

Transaktioner berätta bara för din databas att behandla flera uttalanden som ett uttalande. När ett av påståendena misslyckas rullas alla tillbaka.

Ett viktigt relaterat ämne här är isoleringsnivån . Du kanske vill läsa om dem.

REDIGERA (för att svara på kommentaren):

Det är rätt. Så länge det är ett giltigt uttalande och inget strömavbrott inträffar eller andra orsaker till att en fråga kan misslyckas, görs det. Atomicitet i sig garanterar bara att uttalandet/påståendena görs eller inte. Det garanterar fullständighet och att data inte är korrupta (för att en skrivoperation inte avslutades eller något). Det garanterar inte att data är korrekta. Med tanke på en fråga som INSERT INTO foo SELECT MAX(id) + 1 FROM bar; du måste se till genom att ställa in rätt isoleringsnivå , att du inte får fantomläsningar eller så.



  1. Få MySQL-databasutdata via PHP till XML

  2. Skriv ut all data i flersidig paginering

  3. Benchmarking Managed PostgreSQL Cloud Solutions - Google Cloud:Del tre

  4. APACHE kraschar:Förälder:underordnad process avslutad med status 3221225477 -- Startar om