ON DELETE CASCADE-satsen i MySQL används för att automatiskt avlägsna de matchande posterna från den underordnade tabellen när vi tar bort raderna från den överordnade tabellen. Det är en sorts referenshandling relaterad till främmande nyckel .
Anta att vi har skapat två tabeller med en UTLÄNDLIG KEY i en främmande nyckelrelation, vilket gör båda tabellerna till en förälder och ett barn. Därefter definierar vi en ON DELETE CASCADE-sats för en FOREIGN KEY som måste ställas in för att den andra ska lyckas med kaskadoperationerna. Om ON DELETE CASCADE endast är definierad för en FOREIGN KEY-sats, kommer kaskadoperationer att ge ett fel.
MySQL ON DELETE CASCADE Exempel
Låt oss förstå hur vi kan använda ON DELETE CASCADE-satsen i MySQL-tabellen. Först ska vi skapa två namngivna tabeller Anställd och betalning . Båda tabellerna är relaterade genom en främmande nyckel med en radera-kaskadoperation. Här är en anställd föräldrabord , och betalning är barn bord . Följande skript skapar båda tabellerna tillsammans med deras poster.
Tabell: Anställd
Följande uttalande skapar en tabellanställd:
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) );
Kör sedan infogningsfrågan för att fylla posterna.
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');
Kör SELECT-frågan för att verifiera data till en tabell, som kan visas nedan:
Tabell: Betalning
Nedanstående uttalande skapar en tabell Betalning:
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 );
Därefter kör du infoga uttalande för att fylla posterna i en tabell.
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');
Kör SELECT-frågan för att verifiera data till en tabell, som kan visas nedan:
Låt oss radera data från föräldratabellen Anställd. För att göra detta, kör följande sats:
mysql> DELETE FROM Employee WHERE emp_id = 102;
Ovanstående uttalande kommer att radera de anställdas register vars emp_id = 102 och refererar data till den underordnade tabellen. Vi kan verifiera data med hjälp av SELECT-satsen som ger följande utdata:
I ovanstående utdata kan vi se att alla rader som hänvisar till emp_id = 102 raderades automatiskt från båda tabellerna.
Hur hittar man den berörda tabellen med ON DELETE CASCADE-åtgärden?
Ibland, innan vi tar bort poster från tabellen, vill vi veta vilken tabell som påverkas genom referensåtgärden ON DELETE CASCADE. Vi kan hitta denna information genom att fråga från referential_constraints i informationsschemadatabasen enligt följande:
USE information_schema; SELECT table_name FROM referential_constraints WHERE constraint_schema = 'database_name' AND referenced_table_name = 'parent_table' AND delete_rule = 'CASCADE'
Nedanstående uttalande ger resultatet om tabellerna som är associerade med Employee-tabellen med ON DELETE CASCADE-regeln i anställddb databas:
USE information_schema; SELECT table_name FROM referential_constraints WHERE constraint_schema = 'employeedb' AND referenced_table_name = 'Employee' AND delete_rule = 'CASCADE';
Efter att ha utfört kommandot ovan kommer vi att få utdata nedan:
MySQL PÅ UPPDATERING CASCADE
ON UPDATE CASCADE-sats i MySQL är van vid uppdatering de matchande posterna från den underordnade tabellen automatiskt när vi uppdaterar raderna i den överordnade tabellen. Följande exempel förklarar det tydligare.
Först måste vi använda ÄNDRA TABELL uttalande för att lägga till ON UPDATE CASCADE-satsen i tabellen Betalning enligt nedan:
ALTER TABLE Payment ADD CONSTRAINT `payment_fk` FOREIGN KEY(emp_id) REFERENCES Employee (emp_id) ON UPDATE CASCADE;
Det kommer att ge följande utdata:
I skriptet nedan kommer vi att uppdatera id:t för den anställde i den överordnade tabellen, och det kommer automatiskt att återspegla denna ändring även i den underordnade tabellen:
mysql> UPDATE Employee SET emp_id = 102 WHERE emp_id = 103;
När vi verifierar innehållet i tabellen Anställd och betalning kommer vi att se det emp_id kolumnvärden kommer att uppdateras framgångsrikt.