Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

A inserção/atualização de junção no MySQL é uma operação atômica?


Eu entendo sua pergunta como "cada uma dessas consultas em si é uma operação atômica?". Então a resposta é "sim". As outras duas respostas estão certas, quando dizem que todas as suas afirmações juntas não são atômicas.

Atomicidade em bancos de dados somente significa tudo ou nada. Isso não significa correção dos dados. Sua declaração é bem-sucedida ou não. Não tem nada a ver com junções ou subconsultas. Uma instrução é uma instrução, não importa se seu banco de dados precisa usar uma tabela temporária na memória ou no disco ou não.

As transações apenas dizem ao seu banco de dados para tratar várias instruções como uma instrução. Quando uma das instruções falha, todas elas são revertidas.

Um tópico relacionado importante aqui é o nível de isolamento . Você pode querer ler sobre isso.

EDITAR (para responder ao comentário):

Isso mesmo. Contanto que seja uma declaração válida e nenhuma falha de energia ocorra ou outros motivos pelos quais uma consulta possa falhar, ela está sendo feita. A atomicidade por si só garante que a(s) instrução(ões) está(ão) sendo feita(s) ou não. Ele garante a integridade e que os dados não estão corrompidos (porque uma operação de gravação não foi concluída ou algo assim). Isso não garante a exatidão dos dados. Dada uma consulta como INSERT INTO foo SELECT MAX(id) + 1 FROM bar; você precisa ter certeza através da configuração do nível de isolamento correto , que você não recebe leituras fantasmas nem nada.