sql >> Base de Datos >  >> RDS >> Mysql

¿Es unirse insertar/actualizar en MySQL una operación atómica?

Entiendo su pregunta como "¿cada una de esas consultas en sí misma es una operación atómica?". Entonces la respuesta es "sí". Las otras dos respuestas son correctas, cuando dicen que todas sus declaraciones juntas no son atómicas.

La atomicidad en las bases de datos solo significa todo o nada. No significa exactitud de los datos. Su declaración tiene éxito o no. No tiene nada que ver con uniones o subconsultas. Una declaración es una declaración, sin importar si su base de datos tiene que usar una tabla temporal en la memoria o en el disco o no.

Las transacciones simplemente le dicen a su base de datos que trate varias declaraciones como una sola declaración. Cuando una de las instrucciones falla, todas se revierten.

Un tema relacionado importante aquí es el nivel de aislamiento . Es posible que desee leer sobre ellos.

EDITAR (para responder al comentario):

Así es. Siempre que sea una declaración válida y no se produzca un corte de energía u otras razones por las que una consulta podría fallar, se está realizando. La atomicidad en sí misma solo garantiza que la(s) declaración(es) se está(n) haciendo o no. Garantiza la integridad y que los datos no estén dañados (porque una operación de escritura no finalizó o algo así). No le garantiza la exactitud de los datos. Dada una consulta como INSERT INTO foo SELECT MAX(id) + 1 FROM bar; debe asegurarse de establecer el nivel de aislamiento correcto , que no obtienes lecturas fantasma ni nada.