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;