Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2004
    Messaggi
    577

    [mysql] Trigger Sulla Stessa Tabella

    Buonasera a tutti.

    Ho bisogno di aiuto e come sempre mi rivolgo a questo forum.

    Ho una tabella "anagrafiche" in cui esiste un campo denominato "flg_predefinito".
    Quando inserisco un nuovo record in questa tabella, tramite un trigger ho fatto si che il campo suindicato venga valorizzato automaticamente a "1".

    Il problema ce l'avrei invece nella creazione di un secondo trigger che mi dovrebbe invece valorizzare a "0" lo stesso campo di tutti i vecchi records, che eventualmente hanno "flg_predefinito = 1".

    Il trigger sarebbe questo:

    codice:
    CREATE TRIGGER `deflag_predef` AFTER INSERT ON `anagrafiche` FOR EACH ROW UPDATE anagrafiche SET flg_predefinito = 0 WHERE flg_predefinito = 1;
    Ottengo il seguente errore:

    codice:
    Error Code: 1442 Can't update table 'anagrafiche' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
    Qualcuno potrebbe darmi una dritta ?

    Grazie in anticipo.
    Lucia

  2. #2
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Ma quindi alla fine l'unico record che avrebbe flag 1 è l'ultimo inserito?

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2004
    Messaggi
    577
    esatto !

  4. #4
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Allora che senso ha sprecare un campo, scomodare trigger e quant'altro se devi solo identificare l'ultimo record inserito?

  5. #5
    Utente di HTML.it
    Registrato dal
    Mar 2004
    Messaggi
    577
    ???

  6. #6
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Originariamente inviato da lucisetti
    ???
    Che risposta è?
    Ti serve l'ultimo record ?

    select * from tabella order by id desc limit 1

    senza flag e senza trigger.

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    1,469
    Originariamente inviato da nicola75ss
    Che risposta è?
    Ti serve l'ultimo record ?

    select * from tabella order by id desc limit 1

    senza flag e senza trigger.


    mentre la versione db-portabile (ossia verso dbms che non hanno il LIMIT) può essere

    select * from tabella where id=(select max(id) from tabella).

    Nel caso di mysql se c'è un indice su ID la subquery viene attuata "optimized way", ossia accedendo direttamente alla foglia dell'indice col maggior valore, e in buona sostanza non "paghi" molto rispetto alla prima query

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.