Visualizzazione dei risultati da 1 a 3 su 3

Discussione: MySQL: DELETE CASCADE

  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2002
    Messaggi
    460

    MySQL: DELETE CASCADE

    Ciao a tutti,

    faccio pesante uso della integrita' referenziale e delle clausole ON DELETE CASCADE, quando servono, per abitudine, e mi sono trovato un attimo fa davanti a un problema assolutamente inatteso.

    Supponiamo di avere questo semplice schema:

    codice:
    Tabella CLIENTI (ID, Nome, Cognome)
     Tabella ACQUISTI (ID, IDCliente, Data)
    
    ACQUISTI: IDCliente FOREIGN KEY REFERENCES CLIENTI.ID ON DELETE CASCADE
    Se faccio DELETE FROM CLIENTI WHERE ID=1, elimina sia il cliente sia tutti i suoi acquisti, esattamente come mi aspettavo.

    Supponiamo ora di aggiungere:

    codice:
    Tabella FATTURE (ID, IDCliente, Importo
    
    FATTURE: IDCliente FOREIGN KEY REFERENCES CLIENTI.ID (niente 
    cascade).
    A questo punto, se faccio DELETE FROM CLIENTI WHERE ID=1, la query viene bloccata perche' mi dice che viene violato un vincolo di integrita'.

    Ebbene, davo per *SCONTATO* che facendo DELETE FROM CLIENTI WHERE ID=1 CASCADE, ottenessi una eliminazione forzata di tutte le sotto tabelle, incluse quelle che non hanno ON DELETE CASCADE, ma guardando il manuale di MySQL non c'e' alcuna traccia di uno statement DELETE FROM TABELLA WHERE [...] CASCADE, ne' di altri simili, tipo DELETE CASCADE FROM TABELLA WHERE [...].

    Come e' possibile? Sono io che davo per ovvio una cosa che mi pareva ovvio che fosse SQL standard (dagli studi universitari), oppure sono quelli di MySQL che sono dei cazzoni e hanno implementato male il CASCADE ?

    Personalmente davo per assolutamente scontato che un DELETE FROM TABELLA CASCADE eliminasse tutte le tabelle correlate da foreign key alla tabella padre in cascata, e che la clausola ON DELETE CASCADE fosse solo una comodita' in piu' . Altrimenti, che senso ha? Non posso fare un DELETE in cascata se lo schema del database non lo permette? Mi sembra una stronzata immensa...

    Ditemi che non e' cosi' e che sto sbagliando qualcosa di ovvio, per favore!!!
    There are 10 types of people in the world - those who understand binary and those who don't.

  2. #2
    Vista la tua certezza ho verificato sulla guida di riferimento SQL e ti assicuro che non c'e' alcun CASCADE nella clausola WHERE dell'enunciato DELETE cosi' pure non c'e' in UPDATE.

    Puoi sempre fare un DELETE multi tabella.


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  3. #3
    Utente di HTML.it L'avatar di kuarl
    Registrato dal
    Oct 2001
    Messaggi
    1,093
    Originariamente inviato da piero.mac
    Vista la tua certezza ho verificato sulla guida di riferimento SQL e ti assicuro che non c'e' alcun CASCADE nella clausola WHERE dell'enunciato DELETE cosi' pure non c'e' in UPDATE.

    Puoi sempre fare un DELETE multi tabella.

    o modificare il vincolo della tabella fatture, in modo che comprenda anche le cancellazioni in cascata

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