La clausola ON DELETE CASCADE in MySQL viene utilizzata automaticamente rimuovere i record corrispondenti dalla tabella figlia quando eliminiamo le righe dalla tabella genitore. È una sorta di azione referenziale legata al chiave esterna .
Supponiamo di aver creato due tabelle con una FOREIGN KEY in una relazione di chiave esterna, rendendo entrambe le tabelle genitore e figlio. Successivamente, definiamo una clausola ON DELETE CASCADE per una FOREIGN KEY che deve essere impostata affinché l'altra abbia successo nelle operazioni a cascata. Se ON DELETE CASCADE è definito solo per una clausola FOREIGN KEY, le operazioni a catena genereranno un errore.
MySQL ON DELETE CASCADE Esempio
Cerchiamo di capire come possiamo utilizzare la clausola ON DELETE CASCADE nella tabella MySQL. Per prima cosa creeremo due tabelle denominate Dipendente e pagamento . Entrambe le tabelle sono correlate tramite una chiave esterna con operazione di eliminazione a cascata. Qui, un dipendente è il tabella padre e il pagamento è il tavolo per bambini . Gli script seguenti creano entrambe le tabelle insieme ai relativi record.
Tabella: Dipendente
La seguente istruzione crea una tabella Employee:
CREATE TABLE Employee ( emp_id int(10) NOT NULL, name varchar(40) NOT NULL, birthdate date NOT NULL, gender varchar(10) NOT NULL, hire_date date NOT NULL, PRIMARY KEY (emp_id) );
Successivamente, esegui la query di inserimento per riempire i record.
INSERT INTO Employee (emp_id, name, birthdate, gender, hire_date) VALUES (101, 'Bryan', '1988-08-12', 'M', '2015-08-26'), (102, 'Joseph', '1978-05-12', 'M', '2014-10-21'), (103, 'Mike', '1984-10-13', 'M', '2017-10-28'), (104, 'Daren', '1979-04-11', 'M', '2006-11-01'), (105, 'Marie', '1990-02-11', 'F', '2018-10-12');
Esegui la query SELECT per verificare i dati in una tabella, che può essere mostrata di seguito:
scanner in java
Tabella: Pagamento
L'istruzione seguente crea una tabella Pagamento:
CREATE TABLE Payment ( payment_id int(10) PRIMARY KEY NOT NULL, emp_id int(10) NOT NULL, amount float NOT NULL, payment_date date NOT NULL, FOREIGN KEY (emp_id) REFERENCES Employee (emp_id) ON DELETE CASCADE );
Successivamente, esegui il file inserire la dichiarazione per inserire i record in una tabella.
INSERT INTO Payment (payment_id, emp_id, amount, payment_date) VALUES (301, 101, 1200, '2015-09-15'), (302, 101, 1200, '2015-09-30'), (303, 101, 1500, '2015-10-15'), (304, 101, 1500, '2015-10-30'), (305, 102, 1800, '2015-09-15'), (306, 102, 1800, '2015-09-30');
Esegui la query SELECT per verificare i dati in una tabella, che può essere mostrata di seguito:
Lasciateci eliminare dati dalla tabella padre Employee. Per fare ciò, eseguire la seguente istruzione:
mysql> DELETE FROM Employee WHERE emp_id = 102;
La dichiarazione di cui sopra cancellerà i record dei dipendenti di cui emp_id = 102 E riferimento dati nella tabella figlio. Possiamo verificare i dati utilizzando l'istruzione SELECT che fornirà il seguente output:
Nell'output precedente, possiamo vedere che tutte le righe che fanno riferimento a emp_id = 102 sono state automaticamente eliminate da entrambe le tabelle.
Come trovare la tabella interessata dall'azione ON DELETE CASCADE?
A volte, prima di eliminare i record dalla tabella, vogliamo conoscere la tabella interessata tramite l'azione referenziale ON DELETE CASCADE. Possiamo trovare queste informazioni eseguendo una query da referential_constraints nel database information_schema come segue:
USE information_schema; SELECT table_name FROM referential_constraints WHERE constraint_schema = 'database_name' AND referenced_table_name = 'parent_table' AND delete_rule = 'CASCADE'
L'istruzione seguente produce il risultato relativo alle tabelle associate alla tabella Employee con la regola ON DELETE CASCADE in dipendentedb Banca dati:
USE information_schema; SELECT table_name FROM referential_constraints WHERE constraint_schema = 'employeedb' AND referenced_table_name = 'Employee' AND delete_rule = 'CASCADE';
Dopo aver eseguito il comando precedente, otterremo l'output seguente:
MySQL IN AGGIORNAMENTO A CASCATA
Clausola ON UPDATE CASCADE in MySQL è abituato a aggiornamento i record corrispondenti dalla tabella figlia automaticamente quando aggiorniamo le righe nella tabella genitore. L'esempio seguente lo spiega più chiaramente.
Per prima cosa dobbiamo usare il file ALTERARE LA TABELLA dichiarazione per aggiungere la clausola ON UPDATE CASCADE nella tabella Pagamento come di seguito:
ALTER TABLE Payment ADD CONSTRAINT `payment_fk` FOREIGN KEY(emp_id) REFERENCES Employee (emp_id) ON UPDATE CASCADE;
Fornirà il seguente output:
Nello script seguente, aggiorneremo l'ID del dipendente nella tabella padre e rifletterà automaticamente questa modifica anche nella tabella figlio:
mysql> UPDATE Employee SET emp_id = 102 WHERE emp_id = 103;
Verificando il contenuto della tabella Dipendenti e Pagamenti, lo vedremo emp_id i valori delle colonne verranno aggiornati correttamente.