La tua coda potrebbe essere più concisa. Piuttosto che fare affidamento sul rollback della transazione, puoi farlo in un'unica istruzione atomica senza una transazione esplicita:
UPDATE jobs SET process_id = ? WHERE process_id IS NULL ORDER BY ID ASC LIMIT 1;
Quindi puoi tirare i lavori con (le parentesi [] significano opzionali, a seconda dei tuoi dettagli):
SELECT * FROM jobs WHERE process_id = ? [ORDER BY ID LIMIT 1];