Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    [mysql] lock di tabelle

    Ciao,
    uso mysql 4.1 e non essendo capace di fare una transazione complessa vorrei fare un lavoro di questo tipo:

    ho una tabella cosi' definita:
    |id|nome|contatore|

    e vorrei:
    bloccare in qualche modo il record da aggiornare;
    vedere se esiste un record con id = x;
    - se esiste voglio fare contatore = contatore + 1;
    - se non esiste creo un record cosi': |x|nome di x|1|;
    sbloccare la tabella;

    Potendo preferirei farlo con una transazione (con dentro l'if) ma mi va bene anche con un insieme di query... ma non ci riesco, come si fa?

    Grazie, ciao!

  2. #2
    Moderatore di Server Apache L'avatar di marketto
    Registrato dal
    Sep 2001
    Messaggi
    5,858
    think simple think ringo

  3. #3
    In verita' l'avevo letto quell'articolo pero'... vedi li' mi pare di capire che blocca tutta la tabella..
    io non vorrei bloccare tutta la tabella se possibile ma magari solo il record interessato in quanto in situazioni normali questo mi farebbe perdere molto in prestazioni...

    Qualcosa su come si costruiscono le transazioni con degli if... io ho guardato sul sito di mysql ma non riesco ad usare le condizioni con il risultato di una query... nn ho neanche capito se si puo' o meno, non ci sono esempi in quel senso..


  4. #4
    Moderatore di Server Apache L'avatar di marketto
    Registrato dal
    Sep 2001
    Messaggi
    5,858
    per avere il lock a livello di record devi usare le tabelle InnoDB:
    http://dev.mysql.com/doc/mysql/en/tr...-commands.html


    think simple think ringo

  5. #5
    si' si', io uso innoDB su 4.1 perche' mi servono i vincoli di integrita' e le query annidate.

    Io vorrei fare una query di questo tipo:

    START TRANSACTION;
    SELECT @A:=contatore FROM table WHERE id=1;
    UPDATE table SET contatore=@A+1 WHERE id=1;
    COMMIT;

    Solo che al posto di fare l'update dovrei valutare se esiste gia'un campo con id=1 e allora fare un contatore++, altrimenti fare la insert.

    Ma nn ci riesco.


  6. #6
    Ciao,
    con mysql 4.1 dovresti poter usare

    INSERT ... ON DUPLICATE KEY UPDATE

    sempre che tu abbia un indice unique o una chiave primaria nella tabella
    per favore NIENTE PVT TECNICI da sconosciuti

  7. #7
    Funziona!!!

    Senza fare ne transazioni ne niente...

    Magnifico, GRAZIE!


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 © 2025 vBulletin Solutions, Inc. All rights reserved.