Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2013
    Messaggi
    2

    [MySQL] Esecuzione query con IF

    Salve a tutti

    Ho un semplice dubbio a cui non ho trovato risposta su google purtroppo,

    se io ho una query del tipo:

    codice:
    UPDATE my_users
    SET position2 = CASE position2  WHEN 18 THEN 17
                   WHEN 17 THEN 16
                   WHEN 16 THEN 15
                   END
    WHERE user_id = 12345
    vorrei gentilmente sapere se questa query che contiene una sorta di IF implicito nel comando UPDATE viene eseguita tutta in una volta sola o se MySQL la scompone in parti e la esegue a spezzetoni,
    cioè mi interessa sapere in pratica se nel caso in cui ci sia un'altro thread che mi vuole accedere e modificare la stessa riga, se questo thread comincia leggere/modificare dopo che questa query ha finito o se comincia a leggere/modificare anche prima che la query scritta sopra abbia finito (cioè in parallelo).

    Spero che la domanda non sia troppo stupida...

  2. #2
    Utente bannato
    Registrato dal
    Dec 2012
    Messaggi
    679
    La domanda non è stupida, ma la risposta è articolata.
    Se usi un engine con lock a livello di tabella (es. myisam) allora tutte le scrittura sono serializzate.
    Se usi innodb allora dipende, dal livello di separazione che è stato impostato, variando tra "niente" e "serializzate" per le transazioni.
    codice:
    SET TRANSACTION
    La questione è tipicamente più complicata usando linguaggi vari, spesso attivano autocommit senza pietà per non avere questo genere di problemi.

    Risposta breve: il combinato disposto del livello di isolamento e dell'impostazione di autocommit determinano (se l'engine supporta le transazioni) il comportamento di mysql.

    Soh mejo de guggol

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2013
    Messaggi
    2
    Gentilissimo per la risposta

    il livello di isolamento è quello standard di MySQL (ultima versione stabile), la query viene eseguita su una tabella InnoDB, e ed è attivo auto-commit, quindi in pratica la seconda query che viene eseguita in "parallelo" mi creerebbe problemi oppure no? (e quindi ho necessità di usare le transizioni?)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.