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

MYSQL, PHP Inserir em várias tabelas no banco de dados


Como essas duas inserções são executadas independentemente, outro programa em execução concorrente pode ver o banco de dados em um estado em que a primeira inserção está concluída, mas a segunda não.

Se isso é um problema ou não depende da lógica do aplicativo. No seu caso é difícil dizer sem informações adicionais. Provavelmente não. Uma transação financeira envolvendo duas contas é um exemplo onde isso é um problema:você não quer que a soma de todos os saldos das contas esteja errada a qualquer momento.

Se você acha que precisa disso, pode tornar a operação atômica ao custo de desempenho:outro programa verá o banco de dados antes da primeira inserção ou após a segunda inserção. Funciona assim:
$result = FALSE;
if (mysql_query('BEGIN')) {
    if (mysql_query($query1) &&
        mysql_query($query2))
        $result = mysql_query('COMMIT'); // both queries looked OK, save
    else
        mysql_query('ROLLBACK'); // problems with queries, no changes
}

O mecanismo de armazenamento deve suportar transações, ou seja, deve ser InnoDB . Caso contrário, isso silenciosamente não funcionará.