sql >> Database teknologi >  >> RDS >> Mysql

Er join insert/update på MySQL en atomoperation?

Jeg forstår dit spørgsmål som "er hver af disse forespørgsler i sig selv en atomoperation?". Så er svaret "ja". De to andre svar er rigtige, når de siger, at alle dine udsagn tilsammen ikke er atomare.

Atomicitet i databaser betyder kun alt eller intet. Det betyder ikke rigtigheden af ​​data. Dit udsagn lykkes eller ej. Det har intet at gøre med joins eller underforespørgsler. Én sætning er én sætning, uanset om din database skal bruge en midlertidig tabel i hukommelsen eller på disk eller ej.

Transaktioner fortæller blot din database, at den skal behandle flere erklæringer som én erklæring. Når et af udsagn mislykkes, rulles de alle tilbage.

Et vigtigt relateret emne her er isolationsniveauet . Du vil måske læse op om dem.

EDIT (for at besvare kommentaren):

Det er rigtigt. Så længe det er en gyldig erklæring, og der ikke opstår strømsvigt eller andre årsager til, at en forespørgsel kunne mislykkes, bliver det gjort. Atomicitet i sig selv garanterer bare, at erklæringen/erklæringerne bliver gjort eller ej. Det garanterer fuldstændighed, og at data ikke er korrupte (fordi en skriveoperation ikke blev færdig eller noget). Det garanterer dig ikke for rigtigheden af ​​data. Givet en forespørgsel som INSERT INTO foo SELECT MAX(id) + 1 FROM bar; du skal sikre dig ved at indstille det korrekte isolationsniveau , at du ikke får fantomlæsninger eller noget.



  1. MySQL:Vælg rækker med mere end én forekomst

  2. Sådan opgraderes PostgreSQL 11 til PostgreSQL 12 med nul nedetid

  3. Mysql, omform data fra lang / høj til bred

  4. sammenlægning af to SELECT-forespørgsler