Quote Originariamente inviata da razzoli Visualizza il messaggio
Se stai usando MyISAM, non esistono le transazioni.

Se stai usando InnoDB (che è il default a partire da MySQL 5.5) il trigger avviene dentro la stessa transazione dell'istruzione che lo attiva. Cioè la transazione comincia prima della INSERT e finisce dopo il trigger. Il transaction level deve essere SERIALIZABLE.

Questo è sufficiente a garantire l'isolamento. Non usare LOCK TABLES, che distrugge tutti i benefici delle transazioni - e infatti per default InnoDB lo ignora.
Grazie per la risposta, ma ho risolto in un altro modo. Spiego come in modo che possa essere d'aiuto a tutti: praticamente esiste una funzione LAST_INSERT_ID() che restituisce l'ID dell'ultimo elemento inserito con auto_increment. State tranquilli: Restituisce ad ogni client e ad ogni utente il corretto ID, testato sullo stesso pc con lo stesso user ed anche su pc diversi con lo stesso user e non da assolutamente problemi. L'utilizzo è semplicissimo, ad esempio
codice:
delimiter //
create procedure mia_procedura()
begin
    declare ultimo_id integer;

    insert into tabella_con_autoincrement(attr2) values ('valore');

    select LAST_INSERT_ID()
    into ultimo_id;

    /* potete farci quel che volete */
end;
//
delimiter ;