Vous devez absolument faire les trois insertions dans une transaction. J'écrirais probablement une procédure stockée pour gérer les insertions.
MODIFIER :
Voici un exemple de procédure stockée avec une transaction. Notez l'utilisation de LAST_INSERT_ID() pour obtenir l'ID de l'enregistrement précédemment inséré. Il ne s'agit que de deux tables, mais vous devriez pouvoir l'étendre à trois tables.
DELIMITER //
CREATE PROCEDURE new_engineer_with_task(
first CHAR(35), last CHAR(35), email CHAR(255), tool_id INT)
BEGIN
START TRANSACTION;
INSERT INTO engineers (firstname, lastname, email)
VALUES(first, last, email);
INSERT INTO tasks (engineer_id, tool_id)
VALUES(LAST_INSERT_ID(), tool_id);
COMMIT;
END//
DELIMITER ;
Et vous l'appelez ainsi :
CALL new_engineer_with_task('Jerry', 'Fernholz', '[email protected]', 1);