Le tabelle temporanee sono uniche per connessione (poco importa se due tabelle in due connessioni diverse hanno lo stesso nome, non vanno in conflitto), e una connessione (persistente o no) può essere usata da un solo processo alla volta.

Il problema esiste solo perchè la tabella non viene scaricata fino a quando la connessione non viene chiusa: se la connessione persistente, attiva e inutilizzata, viene raccolta da una richiesta successiva allora la tabella esiste già, per questo bisogna fare
DROP TEMPORARY TABLE IF EXISTS mia_tabella prima di creare la tabella temporanea