View Full Version : [MySql]Problema concorrenza UPDATE
Come viene gestita la concorrenza in una query di tipo UPDATE?
Se due utenti fanno un update allo stesso momento che succede?
Come viene gestita la concorrenza in una query di tipo UPDATE?
Se due utenti fanno un update allo stesso momento che succede?
una UPDATE internamente è un'istruzione "atomica".
quindi da quando la "where" legge a quando la "set" scrive, non possono esserci cambiamenti.
Se due utenti fanno una update insieme ha ragione dupa, ma se i due utenti fanno una update selezionando le tuple in base a query precedenti allora si devono possono fare due cose:
- includere il tutto in un transazione (tabelle InnoDB)
- fare lock della tabella prima delle query che determinano le tuple da selezionare per l'update e rilasciarla dopo l'update (tabelle MyISAM)
Se due utenti fanno una update insieme ha ragione dupa, ma se i due utenti fanno una update selezionando le tuple in base a query precedenti allora si devono possono fare due cose:
- includere il tutto in un transazione (tabelle InnoDB)
- fare lock della tabella prima delle query che determinano le tuple da selezionare per l'update e rilasciarla dopo l'update (tabelle MyISAM)
Credo di non aver ben capito.
Cosa sono le tuple in base ai query precedenti? Perdonami se è una domanda banale ma non sono ferratissimo sull'argomento, sto iniziando a guardarli ora i db.
Credo di non aver ben capito.
Cosa sono le tuple in base ai query precedenti? Perdonami se è una domanda banale ma non sono ferratissimo sull'argomento, sto iniziando a guardarli ora i db.
se tu fai nello stesso script due query da parte dello stesso utente, non c'è la garanzia che "tra le due query" se ne infili una terza lanciata da un diverso script in esecuzione in quel momento.
se vuoi la garanzia che un gruppo di più query venga eseguito in "un colpo solo" senza che altre query esterne possano infilarsi in mezzo devi racchiuedere le query in una "transazione", che verrà eseguita solo quando ne darei il "commit"
Ok credo di aver capito, l'unica mia necessità è che se io salvo dei dati in un campo, e allo stesso tempo un altro utente salva dati nello stesso campo, i dati non siano "mischiati".
Ok credo di aver capito, l'unica mia necessità è che se io salvo dei dati in un campo, e allo stesso tempo un altro utente salva dati nello stesso campo, i dati non siano "mischiati".
Questo non succede, ma ovviamente una delle due modifiche viene persa...
Per tupla si intende una "riga" di una relazione (tabella)...
RaouL_BennetH
04-12-2006, 11:51
scusate se mi intrometto, ma sono interessato anche io :)
Io da alcuni esempi trovati sul sito ufficiale di mysql stavo agendo così:
LOCK TABLES nometabella WRITE;
UPDATE nometabella SET blablbalbalbabla....
UNLOCK TABLES;
è corretto o c'è un modo migliore di agire?
Grazie.
Raoul.
scusate se mi intrometto, ma sono interessato anche io :)
Io da alcuni esempi trovati sul sito ufficiale di mysql stavo agendo così:
LOCK TABLES nometabella WRITE;
UPDATE nometabella SET blablbalbalbabla....
UNLOCK TABLES;
è corretto o c'è un modo migliore di agire?
Grazie.
Raoul.
se le tabelle che usi supportano le transazioni, usa quelle e non le lock.
RaouL_BennetH
06-12-2006, 12:42
se le tabelle che usi supportano le transazioni, usa quelle e non le lock.
grazie :)
Ma non ho ancora studiato le transazioni. Inoltre il db che sto progettando può essere al massimo usato contemporaneamente da 4/5 utenze.
Intanto mi documento e grazie ancora :)
Quindi ricordati di fare tabelle MyISAM...
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.