Domanda

Sto cercando di analizzare MySQL docs . Potrebbero essere più chiari. Quello che sembrano dire è che ci sono cinque possibilità: SET NULL, NO ACTION, RESTRICT, CASCADE e SET DEFAULT.

NESSUNA AZIONE e RESTRETTO fanno la stessa cosa (impedisce qualsiasi modifica del DB che rompe un FK) e quella cosa è l'impostazione predefinita, quindi se ometti una clausola ON DELETE stai dicendo NESSUNA AZIONE (o RESTRETTO - stessa cosa).

SET NULL consente l'eliminazione della riga principale, imposta FK su NULL.

CASCADE elimina la riga figlio.

SET DEFAULT non dovrebbe mai essere usato.

È più o meno corretto?

È stato utile?

Soluzione

Sì, è corretto:

  

NESSUNA AZIONE : [...] InnoDB   rifiuta l'operazione di eliminazione o aggiornamento   per la tabella padre.

     

RESTRICT : rifiuta l'eliminazione o l'aggiornamento   operazione per la tabella padre.   Specificare RESTRICT (o NO AZIONE) è   lo stesso che omettere ON DELETE o   Clausola ON UPDATE. [...]

Apparentemente NESSUNA AZIONE e RESTRICT sono sinonimi. Inoltre, poiché vengono utilizzati ogni volta che non esiste una clausola ON DELETE / UPDATE , questo è il comportamento predefinito.

  

SET NULL : elimina o aggiorna la riga dalla tabella principale e imposta il   colonna o colonne di chiave esterna in   tabella figlio su NULL. [...]

La colonna esterna è impostata su NULL, a condizione che non sia dichiarata come NOT NULL (o InnoDB non consentirà l'eliminazione o l'aggiornamento).

  

CASCADE : elimina o aggiorna la riga dalla tabella padre e   elimina o aggiorna automaticamente il file   righe corrispondenti nella tabella figlio.   [...]

La cascata elimina (o aggiorna) la colonna esterna.

  

IMPOSTA DEFAULT : questa azione è riconosciuta   dal parser, ma InnoDB rifiuta   definizioni di tabella contenenti ON DELETE   SET DEFAULT o ON UPDATE SET DEFAULT   clausole.

Quindi sostanzialmente non puoi usare quell'opzione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top