You should definitely do the three inserts in a transaction. I would probably write a stored procedure to handle the inserts.
EDIT:
Here is an example of a stored procedure with a transaction. Note the use of LAST_INSERT_ID() to get the ID of the previously inserted record. This is only two tables, but you should be able to extend it to three 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 ;
And you call it like so:
CALL new_engineer_with_task('Jerry', 'Fernholz', '[email protected]', 1);
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…