Salve a tutti,
ho un dubbio, quasi esistenziale: un trigger qualsiasi è visto da mysql come una transazione? Mi spiego meglio, ho un trigger che inserisce un record in una tabella con l'id in auto incremento. Dopo, all'interno dello stesso trigger, devo inserire lo stesso id in un'altra tabella. Per ottenere questo id uso la seguente query (dentro il trigger):
codice:
create trigger mioTrigger
after insert on tabellaTarget
...
declare id_cheMiInteressa integer;
insert into tabella1(attr1, attr2) values ('valore1', 'valore2');
select id
into id_cheMiInteressa
from tabella1
order by id desc
limit 1;
...
insert into altraTabella(id, data) values (id_cheMiInteressa, now());
...
Il problema è che se due utenti inseriscono dati contemporaneamente in
vengono creati due record in
... Quale dei due id appartiene ad un utente? Pensavo di risolvere bloccando le tabelle...
non sapendo se venga lanciato implicitamente il lock sulle tabelle ho provato ad aggiungere al codice
codice:
lock tables tabella1 write;
ma mysql mi restituisce un errore dicendomi che non è possibile usare lock all'interno di procedure salvate.
In definitiva quindi, all'interno del trigger e durante l'esecuzione dello stesso, le tabelle interessate sono messe in lock?
Grazie in anticipo!