Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11

Discussione: [MySql] Creazione trigger

  1. #1

    [MySql] Creazione trigger

    Salve,
    inanzitutto volevo chiedervi se fosse possibile dichiarare il trigger (in phpmyadmin) tramite il form SQL all'interno della relazione.
    Adesso passo alla domanda principale: ho tre relazioni
    CANE(id_cane,nome,età_approssimativa,razza,numero_ gabbia)
    GABBIE(id_gabbia,capienza_massima,posti_occupati,i d_responsabile)
    ADOZIONE(id_adozione,id_cane,codFiscale_cittadino, data,id_volontario)

    Vorrei creare un trigger che ogni qual volta associo un cane al numero della gabbia, quella gabbia aumenti di 1 i posti occupati e quando posti occupati = capienza massima sarà impossibile inserire altri cani all'interno. inoltre ogni volta che un cane è associato ad un adozione elimino l'associazione con gabbie e decremento i posti occupati.

    Nonostante conosca la sintassi dei trigger e mi sia esercitato abbastanza, non capisco come dovrei risolvere. Qualcuno può aiutare?

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    402
    sono un po' di fretta se posso poi ti rispondo meglio, intanto posso dirti che da phpmyadmin su ogni tabella c'è la voce "trigger" in alto a destra, sulla barra del menu dove compaiono tutte le opzioni associate a quella tabella. Ti basta cliccare lì e comprarirà una maschera dove puoi inserire il tuo trigger.

  3. #3
    Quindi non posso creare direttamente da 0? mi pare parecchio scomodo. Ma come faccio a modificare i valori dei parametri? Devo usare for each row e ad esempio N.tabella=o.tabella+1 ?

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    402
    Puoi sempre creare direttamente da 0 anche se hai phpmyadmin, vai nella console mysql e fai quello che ti pare! Però non capisco quale sia la "scomodità" di farlo da phpmyadmin. Lui semplicemente ti aggiunge in automatico alcune cose standard. Tipo FOR EACH ROW non devi scriverlo, lo mette lui.
    Questo è un esempio di trigger funzionante:

    codice:
    CREATE TRIGGER `Incremento_Iscrizioni`
    AFTER UPDATE ON `ISCRIZIONE` 
    FOR EACH ROW 
    BEGIN            
    IF NEW.Stato <> OLD.Stato AND New.Stato='C' THEN
    UPDATE UTENTE
    SET Iscrizioni_Confermate=Iscrizioni_Confermate+1
    WHERE UTENTE.Username=NEW.UtenteS;
    END IF; END
    Però io nella maschera ho dovuto inserire solo questa parte:

    codice:
    BEGIN            
    IF NEW.Stato <> OLD.Stato AND New.Stato='C' THEN
    UPDATE UTENTE
    SET Iscrizioni_Confermate=Iscrizioni_Confermate+1
    WHERE UTENTE.Username=NEW.UtenteS;
    END IF; END
    Il resto lo completi da menu, tranne FOR EACH ROW che lo mette lui in automatico.

  5. #5
    Perfetto, grazie mille! non capisco cosa sbaglio, mi dice 'errore di sintassi vicino a linea 6'

    Codice PHP:
    CREATE TRIGGER `Incremento_PostiOccupati`AFTER INSERT ON `cane
    FOR 
    EACH ROW
    BEGIN            
    UPDATE gabbie
    SET gabbie
    .posti_occupati=gabbie.posti_occupati+1;
    WHERE cane.numero_gabbia=gabbie.id_gabbia
    END


  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    402
    il ; va solo alla fine della WHERE e/o di un END IF eventualmente.

  7. #7
    Ho modificato con:
    codice:
    CREATE TRIGGER `Incremento_PostiOccupati`AFTER INSERT ON `cane` 
    FOR EACH ROW
    BEGIN            
    UPDATE gabbie
    SET gabbie.posti_occupati=gabbie.posti_occupati+1
    WHERE cane.numero_gabbia=gabbie.id_gabbia;
    Ma continua a dare errore a linea 6

  8. #8
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    402
    manca l'END finale. non stai chiarendo però se la inserisci da phpmyadmin o direttamente dalla console mysql

  9. #9
    L'ho messo ma non va comunque. Lo sto inserendo in PHPmyadmin e ho provato sia manualmente sia tramite la funzione trigger.

  10. #10
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    402
    ricordati che dopo l'END non ci va il ;
    ma che errore ti dà?

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