logo

MySQL PÅ SLETT CASCADE

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:

MySQL PÅ SLETT CASCADE

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:

MySQL PÅ SLETT CASCADE

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:

MySQL PÅ SLETT CASCADE

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Å SLETT CASCADE

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:

MySQL PÅ SLETT CASCADE

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.

MySQL PÅ SLETT CASCADE