28 Giugno 2022
Expand search form

Cosa c’è su delete restrict?

Agnieszka è un Chief Content Officer di Vertabelo. Prima di arrivare a Vertabelo, ha lavorato come programmatrice Java. Ha un dottorato in matematica e oltre 10 anni di esperienza nell’insegnamento della matematica e dell’informatica all’Università di Varsavia. Nel suo tempo libero, le piace leggere un buon libro, fare escursioni in montagna e praticare yoga.

Quando create una chiave esterna nel vostro database, potete specificare cosa succede alla cancellazione della riga madre. Di solito ci sono quattro possibilità:

  1. ON DELETE SET NULL
  2. SU CANCELLAZIONE A CASCATA
  3. SU DELETE NO ACTION
  4. SU DELETE RESTRICT

Oggi studieremo la sottile differenza tra le ultime due opzioni.

In alcuni database non c’è alcuna differenza

Se invece c’è una differenza.

I database IBM DB2, PostgreSQL (per i vincoli INITIALLY DEFERRED), HSQLDB e SQLite conoscono la differenza tra ON DELETE RESTRICT e ON DELETE NO ACTION.

Nei database in cui le due clausole sono diverse:

  • Le regole di vincolo RESTRICT sono controllate prima di qualsiasi altra operazione,
  • le regole di vincolo NO ACTION sono controllate dopo che l’istruzione e tutte le altre operazioni (come i trigger) sono completate.

Nella maggior parte dei casi, non c’è differenza tra le due opzioni. La differenza è visibile quando l’operazione di cancellazione è attivata da qualche altra operazione, come la cancellazione a cascata da un’altra tabella, la cancellazione tramite una vista con una UNION, un trigger, ecc.

Esempio: SU DELETE RESTRICT

Diamo un’occhiata a un esempio. Qui ci sono quattro tabelle: r0 , r1 , r2 , r3 . La tabella r0 è la tabella madre delle tabelle r1 e r2 con il vincolo DELETE CASCADE, la tabella r2 è la madre di r3 con il vincolo DELETE CASCADE, e r1 è la madre di r3 con il vincolo ON DELETE RESTRICT. Nell’esempio uso il vincolo ON DELETE RESTRICT INITIALLY DEFERRED perché è quando si vede la differenza in PostgreSQL.

Le note blu mostrano i dati in tutte le tabelle.

Proviamo a cancellare tutte le righe in r0 in PostgreSQL:

Cosa è successo qui? Un possibile scenario assomiglia a questo:

  • il database cerca di cancellare tutte le righe della tabella r0
  • in cascata, prova a cancellare le righe in r1
  • in cascata di nuovo, prova a cancellare le righe in r3 . MA le righe in r3 sono ancora riferimenti in r2 .
  • L’operazione di cancellazione è vietata.

Esempio: SU DELETE NESSUNA AZIONE

Ora date un’occhiata a questo esempio. L’unica differenza è che ora il vincolo sul riferimento tra le tabelle n1 e n3 è ON DELETE NO ACTION (in più ho rinominato le tabelle r* in tabelle n*). I dati nelle tabelle sono gli stessi di prima.

Potresti anche essere interessato agli argomenti

È su delete limitare di default?

NO ACTION e RESTRICT fanno la stessa cosa (prevenire qualsiasi cambiamento del DB che rompa un FK) e questa cosa è il default, quindi se omettete una clausola ON DELETE state dicendo NO ACTION (o RESTRICT — stessa cosa).

Continua…

Che cos’è l’SQL delete restrict?

RESTRICT : Rifiuta l’operazione di cancellazione o di aggiornamento per la tabella madre. Specificare RESTRICT (o NO ACTION) è come omettere la clausola ON DELETE o ON UPDATE. NO ACTION: una parola chiave dell’SQL standard.

Continua…

Che cosa è on delete restrict on update cascade?

ON DELETE CASCADE significa che se il record padre viene cancellato, anche i record figli vengono cancellati.

Continua…

Che cosa significa restringere il database?

Una restrizione del database è un mezzo per limitare quali casi nei dati di origine sono inclusi in un’operazione di data mining (MGPS o regressione logistica) specificando o selezionando una query. Le statistiche di data mining si basano solo sui casi che soddisfano i criteri della query.

Continua…

Perché usare restrict delete?

La clausola ON DELETE dice che se un particolare valore ID della chiave primaria nella tabella CUSTOMERS viene cancellato, questa azione sarà impedita (questa è la parte “restrict”) se c’è qualche riga nella tabella ORDERS che ha una chiave esterna che corrisponde al valore del valore ID della tabella CUSTOMER.4 maggio 2006

Continua…

Qual è la differenza tra restrict e Cascade?

restrict: impedisce che l’azione avvenga se c’è qualche chiave esterna che si basa sui campi che vengono cambiati, cioè modifica il comportamento della tabella master. cascade: propaga il cambiamento quando il genitore cambia, cioè modifica il comportamento della tabella figlia.

Continua…

Quando usare on delete restrict?

Quando usare ON DELETE RESTRICT? Ogni volta che non vogliamo righe “orfane” nel database! Non vogliamo cancellare un cliente dalla tabella CUSTOMER se ci sono ordini per quel cliente nella tabella ORDERS.4 maggio 2006

Continua…

Cosa fa on update restrict?

1 Risposta. RESTRICT impedisce che l’azione avvenga se c’è qualche chiave esterna che si basa sul campo che viene modificato.3 Dic 2011

Continua…

Una chiave primaria può essere una chiave esterna?

Sì, è legale avere una chiave primaria che sia una chiave esterna. Questo è un costrutto raro, ma si applica per: una relazione 1:1. Le due tabelle non possono essere fuse in una sola a causa delle diverse autorizzazioni e i privilegi si applicano solo a livello di tabella (a partire dal 2017, un tale database sarebbe strano).11 giu 2012

Continua…

Cosa fa l’azione on delete No?

L’azione ON DELETE SET NULL permette ai dati che fanno riferimento alla chiave padre di essere cancellati, ma non aggiornati. Quando i dati referenziati nella chiave padre vengono cancellati, tutte le righe della tabella figlia che dipendono da quei valori della chiave padre hanno le loro chiavi esterne impostate su null.

Continua…

Cos’è la cancellazione a cascata in SQL?

Il vincolo ON DELETE CASCADE è usato in MySQL per cancellare automaticamente le righe della tabella figlia quando le righe della tabella madre vengono cancellate.8 feb 2021

Continua…

Come funziona il vincolo di cancellazione?

La clausola ON DELETE dice che se un particolare valore ID della chiave primaria nella tabella CUSTOMERS viene cancellato, questa azione sarà impedita (questa è la parte “restrict”) se c’è qualche riga nella tabella ORDERS che ha una chiave esterna che corrisponde al valore del valore ID della tabella CUSTOMER.4 maggio 2006

Continua…

La cascata è una regola di cancellazione?

Una chiave esterna con cancellazione a cascata significa che se un record nella tabella padre viene cancellato, allora i record corrispondenti nella tabella figlia saranno automaticamente cancellati. Questo si chiama cancellazione a cascata in SQL Server.

Continua…

Come usare le restrizioni di cancellazione in SQL?

La clausola ON DELETE dice che se un particolare valore ID della chiave primaria nella tabella CUSTOMERS viene cancellato, questa azione sarà impedita (questa è la parte “restrict”) se c’è qualche riga nella tabella ORDERS che ha una chiave esterna che corrisponde al valore del valore ID della tabella CUSTOMER.4 maggio 2006

Continua…

Cos’è on delete cascade?

ON DELETE CASCADE. Specifica che i dati dei figli vengono cancellati quando vengono cancellati i dati dei genitori. … Si usa insieme a ON DELETE o ON UPDATE. Significa che i dati figli vengono cancellati o aggiornati quando i dati genitori vengono cancellati o aggiornati.

Continua…

Articolo precedente

Si possono tagliare le erbe ornamentali in estate?

Articolo successivo

Quando è morto Alfred Lord Tennyson?

You might be interested in …

Quanto costa Underdeck?

Quanto costa un soffitto Under Deck? Hai visto le belle immagini di ciò che è possibile sotto un ponte al secondo piano. Basta guardare una galleria d’ispirazione, e sarete presto alla ricerca di ulteriori informazioni […]

Cos’è un body watch?

Sapere come usare il Samsung Galaxy Watch 4 per misurare la composizione corporea significa che puoi iniziare a trarre vantaggio dalla caratteristica di salute del tuo smartwatch. L’impedenza bioelettrica (BIA), una tecnologia che si trova […]