Votre retrait de la file d'attente pourrait être plus concis. Plutôt que de compter sur l'annulation de la transaction, vous pouvez le faire dans une seule instruction atomique sans transaction explicite :
UPDATE jobs SET process_id = ? WHERE process_id IS NULL ORDER BY ID ASC LIMIT 1;
Ensuite, vous pouvez extraire des travaux avec (les crochets [] signifient facultatif, selon vos informations) :
SELECT * FROM jobs WHERE process_id = ? [ORDER BY ID LIMIT 1];