Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2009
    Messaggi
    11

    [MySQL] Problema con trigger MySQL

    Ciao a tutti,
    ho una tabella con tanti test diversi, ma solo uno alla volta puó essere attivo, quindi vorrei che quando l'utente modifica il campo "Active" col valore 1, per gli altri test il valore "Active" vada a 0.
    Perció ho fatto questo trigger:

    Delimiter //
    CREATE TRIGGER Trig_tests
    BEFORE UPDATE ON tests
    FOR EACH ROW BEGIN

    IF New.Active = 1 THEN
    update tests set Active = 0 where Test_nbr = OLD.Test_nbr AND Active = 1 AND Test_id != OLD.Test_id;
    END IF;

    END; //
    Delimiter;

    Peró quando vado ad aggiornare la tabella mi dice:
    Can't update table 'tests' in stored function/trigged cause it is already used by statement which invoked this stored this function/trigger.

    Come posso fare?
    Grazie
    Andrea

  2. #2
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Non potresti fare una query del genere?

    codice:
    update tests
    set active = 
    case id
    when x then 1
    else 0
    end
    dove x è l'id del record. In questo modo ogni volta che setti a 1 il suo valore, tutti gli altri saranno record saranno settati a 0.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2009
    Messaggi
    11
    Grazie per la risposta Nicola,
    facendolo con una query funziona, ma il fatto é che ció dovrebbe essere un vincolo del Database: "c'é al piú un test attivo".
    Con un query posso settare i valori, ma a nessuno viene vitetata la possibilitá di fare una query del tipo:
    update tests
    set Active = 1
    where Test_id = xxxxxx;

    Rendendo i dai inconsistenti...

  4. #4
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    La mia query vorrebbe sostituirsi alla tua.
    Se fai alcuni tentativi modificando di volta in volta l'id vedrai che vengono aggiornati due record, cioè quello nuovo che viene settato a 1 e quello che in precedenza aveva valore 1 che passerà a 0. Mi sembra faccia esattamente ciò che chiedi.

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2009
    Messaggi
    11
    Mi sa che stiamo parlando di cose diverse...
    la tua é una query: query --> modifica tabella
    il mio é un trigger: altra query --> modifica tabella --> attiva trigger (il trigger é definito in UPDATE)
    Il fatto é che il trigger, definendo dei vincoli sulla struttura del DB, viene lanciato automaticamente all'innescarsi dell'evento UPDATE, se uso la tua query all'interno del trigger il risultato che ottengo é il medesimo del primo post.
    :-(

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.