Вы обязательно должны сделать три вставки в транзакции. Я, вероятно, написал бы хранимую процедуру для обработки вставок.
EDIT:
Вот пример хранимой процедуры с транзакцией. Обратите внимание на использование LAST_INSERT_ID () для получения идентификатора ранее вставленной записи. Это всего две таблицы, но вы можете расширить ее до трех таблиц.
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 ;
И вы называете это так:
CALL new_engineer_with_task('Jerry', 'Fernholz', 'me@somewhere.com', 1);