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

Como inserir dados em várias tabelas com dependências de chave estrangeira envolvidas (MySQL)


Resumindo, você deseja usar transações (mais documentos sobre isso) para que suas inserções sejam atômica . Esta é a única forma de garantir que todos (ou nenhum) dos seus dados serão inseridos. Caso contrário, você pode entrar na situação descrita em que o banco de dados fica indisponível após algumas inserções e outras não podem ser concluídas. Uma transação informa ao banco de dados que o que você está fazendo é tudo ou nada e, portanto, deve reverter se algo der errado.

Quando você está usando chaves primárias sintéticas, como está, PHP e outras linguagens fornecem mecanismos para obter o último id inserido. Se você quiser fazer isso inteiramente no MySQL, você pode usar o LAST_INSERT_ID() função. Você vai acabar com um código como este:
START TRANSACTION;
INSERT INTO foo (auto,text)
    VALUES(NULL,'text');         # generate ID by inserting NULL
INSERT INTO foo2 (id,text)
    VALUES(LAST_INSERT_ID(),'text');  # use ID in second table
COMMIT;