ON DELETE CASCADE-sætning i MySQL bruges til automatisk fjerne de matchende poster fra den underordnede tabel, når vi sletter rækkerne fra den overordnede tabel. Det er en slags referencehandling relateret til fremmed nøgle .
Antag, at vi har oprettet to tabeller med en UDENLANDSKE NØGLE i et fremmednøgleforhold, hvilket gør begge tabeller til en forælder og et underordnet. Dernæst definerer vi en ON DELETE CASCADE-klausul for én FOREIGN KEY, der skal indstilles for at den anden skal lykkes i kaskadeoperationerne. Hvis ON DELETE CASCADE kun er defineret for én FOREIGN KEY-klausul, vil cascading-operationer give en fejl.
MySQL ON SLET CASCADE Eksempel
Lad os forstå, hvordan vi kan bruge ON DELETE CASCADE-sætningen i MySQL-tabellen. Først skal vi oprette to navngivne tabeller Medarbejder og betaling . Begge tabeller er relateret gennem en fremmednøgle med på slette-kaskade operation. Her er en medarbejder forældre tabel , og betaling er den børnebord . Følgende scripts opretter begge tabeller sammen med deres poster.
Tabel: Medarbejder
Følgende erklæring opretter en tabelmedarbejder:
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) );
Udfør derefter indsættelsesforespørgslen for at udfylde posterne.
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');
Udfør SELECT-forespørgslen for at bekræfte dataene i en tabel, som kan vises nedenfor:
Tabel: Betaling
Nedenstående opgørelse opretter en tabel Betaling:
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 );
Udfør derefter indsæt erklæring at udfylde posterne i en tabel.
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');
Udfør SELECT-forespørgslen for at bekræfte dataene i en tabel, som kan vises nedenfor:
Lad os slette data fra forældretabellen Medarbejder. For at gøre dette skal du udføre følgende sætning:
mysql> DELETE FROM Employee WHERE emp_id = 102;
Ovenstående erklæring vil slette de medarbejderregistre, hvis emp_id = 102 og refererer data ind i den underordnede tabel. Vi kan verificere dataene ved hjælp af SELECT-sætningen, der giver følgende output:
I ovenstående output kan vi se, at alle rækkerne, der refererer til emp_id = 102, automatisk blev slettet fra begge tabeller.
Hvordan finder man den berørte tabel ved ON DELETE CASCADE handling?
Nogle gange, før vi sletter poster fra tabellen, ønsker vi at kende den berørte tabel med henvisningshandlingen ON DELETE CASCADE. Vi kan finde denne information ved at forespørge fra referential_constraints i informationsskemadatabasen som følger:
USE information_schema; SELECT table_name FROM referential_constraints WHERE constraint_schema = 'database_name' AND referenced_table_name = 'parent_table' AND delete_rule = 'CASCADE'
Nedenstående erklæring producerer resultatet om de tabeller, der er knyttet til tabellen medarbejder med ON DELETE CASCADE-reglen i medarbejderdb database:
USE information_schema; SELECT table_name FROM referential_constraints WHERE constraint_schema = 'employeedb' AND referenced_table_name = 'Employee' AND delete_rule = 'CASCADE';
Efter at have udført ovenstående kommando, får vi outputtet nedenfor:
tal i alfabetet
MySQL PÅ OPDATERING CASCADE
ON UPDATE CASCADE-klausul i MySQL er vant til opdatering de matchende poster fra den underordnede tabel automatisk, når vi opdaterer rækkerne i den overordnede tabel. Følgende eksempel forklarer det mere tydeligt.
Først skal vi bruge ÆNDRE TABEL erklæring for at tilføje ON UPDATE CASCADE-klausulen i tabellen Betaling som nedenfor:
ALTER TABLE Payment ADD CONSTRAINT `payment_fk` FOREIGN KEY(emp_id) REFERENCES Employee (emp_id) ON UPDATE CASCADE;
Det vil give følgende output:
I nedenstående script opdaterer vi medarbejderens id i forældretabellen, og det vil automatisk også afspejle denne ændring i underordnet tabel:
mysql> UPDATE Employee SET emp_id = 102 WHERE emp_id = 103;
Når vi verificerer indholdet af tabellen medarbejder og betaling, vil vi se det emp_id kolonneværdier vil blive opdateret.