ON DELETE CASCADE-klausulen i MySQL brukes til automatisk fjerne de samsvarende postene fra den underordnede tabellen når vi sletter radene fra den overordnede tabellen. Det er en slags referansehandling knyttet til fremmednøkkel .
Anta at vi har opprettet to tabeller med en UTENLANDSKE NØKKEL i et fremmednøkkelforhold, noe som gjør begge tabellene til en forelder og et barn. Deretter definerer vi en ON DELETE CASCADE-klausul for én FOREIGN KEY som må settes for at den andre skal lykkes i kaskadeoperasjonene. Hvis ON DELETE CASCADE bare er definert for én FOREIGN KEY-klausul, vil kaskadeoperasjoner gi en feil.
MySQL PÅ SLETT CASCADE Eksempel
La oss forstå hvordan vi kan bruke ON DELETE CASCADE-klausulen i MySQL-tabellen. Først skal vi lage to tabeller med navn Ansatt og betaling . Begge tabellene er relatert gjennom en fremmednøkkel med en slette-kaskadeoperasjon. Her er en ansatt foreldretabell , og betaling er barnebord . Følgende skript oppretter begge tabellene sammen med postene deres.
Tabell: Ansatt
Følgende setning oppretter en tabellansatt:
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) );
Deretter utfører du innsettingsspørringen for å fylle postene.
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');
Utfør SELECT-spørringen for å bekrefte dataene i en tabell, som kan vises nedenfor:
Tabell: Betaling
Utskriften nedenfor oppretter en tabell 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 );
Deretter utfører du sette inn uttalelse for å fylle postene 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');
Utfør SELECT-spørringen for å bekrefte dataene i en tabell, som kan vises nedenfor:
La oss slette data fra overordnet tabellen Ansatt. For å gjøre dette, utfør følgende setning:
mysql> DELETE FROM Employee WHERE emp_id = 102;
Ovennevnte erklæring vil slette de ansattes poster hvis emp_id = 102 og refererer data inn i den underordnede tabellen. Vi kan verifisere dataene ved å bruke SELECT-setningen som vil gi følgende utdata:
I utgangen ovenfor kan vi se at alle radene som refererer til emp_id = 102 ble automatisk slettet fra begge tabellene.
Hvordan finne den berørte tabellen ved å ON SLETTE CASCADE handling?
Noen ganger, før vi sletter poster fra tabellen, ønsker vi å vite den berørte tabellen ved hjelp av ON DELETE CASCADE-referansehandlingen. Vi kan finne denne informasjonen ved å spørre fra referential_constraints i informasjonsskjemadatabasen 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'
Utsagnet nedenfor produserer resultatet om tabellene knyttet til Employee-tabellen med ON DELETE CASCADE-regelen i ansattdb database:
USE information_schema; SELECT table_name FROM referential_constraints WHERE constraint_schema = 'employeedb' AND referenced_table_name = 'Employee' AND delete_rule = 'CASCADE';
Etter å ha utført kommandoen ovenfor, vil vi få utdataene nedenfor:
tall i alfabetet
MySQL PÅ OPPDATERING CASCADE
ON UPDATE CASCADE-klausul i MySQL er vant til Oppdater de samsvarende postene fra den underordnede tabellen automatisk når vi oppdaterer radene i den overordnede tabellen. Følgende eksempel forklarer det tydeligere.
Først må vi bruke ENDRE TABELL uttalelse for å legge til 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 gi følgende utgang:
I skriptet nedenfor vil vi oppdatere ID-en til den ansatte i foreldretabellen, og den vil automatisk gjenspeile denne endringen også i underordnet tabell:
mysql> UPDATE Employee SET emp_id = 102 WHERE emp_id = 103;
Ved å verifisere innholdet i tabellen for ansatte og betaling, vil vi se det emp_id kolonneverdier vil bli oppdatert.