logo

MySQL NA USUŃ KASKADĘ

Klauzula ON DELETE CASCADE w MySQL jest używana automatycznie usunąć pasujące rekordy z tabeli podrzędnej, gdy usuwamy wiersze z tabeli nadrzędnej. Jest to rodzaj akcji referencyjnej związanej z klucz obcy .

Załóżmy, że utworzyliśmy dwie tabele z KLUCZEM OBCYM w relacji klucza obcego, czyniąc obie tabele tabelami nadrzędnymi i podrzędnymi. Następnie definiujemy klauzulę ON DELETE CASCADE dla jednego KLUCZÓW OBCYCH, która musi być ustawiona, aby drugi mógł pomyślnie wykonywać operacje kaskadowe. Jeśli zdefiniowano ON DELETE CASCADE tylko dla jednej klauzuli FOREIGN KEY, wówczas operacje kaskadowe zgłoszą błąd.

Przykład MySQL NA USUŃ KASKADĘ

Pozwól nam zrozumieć, jak możemy użyć klauzuli ON DELETE CASCADE w tabeli MySQL. Najpierw utworzymy dwie tabele o nazwach Pracownik i płatność . Obie tabele są powiązane poprzez klucz obcy z operacją kaskadową przy usuwaniu. Tutaj pracownik jest tabela nadrzędna , a Płatność to stolik dziecięcy . Poniższe skrypty tworzą obie tabele wraz z ich rekordami.

Tabela: Pracownik

jakie miesiące są q3

Poniższa instrukcja tworzy tabelę Pracownik:

 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) ); 

Następnie wykonaj zapytanie wstawiające, aby wypełnić rekordy.

sortuj listę tablic w Javie
 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'); 

Wykonaj zapytanie SELECT, aby zweryfikować dane w tabeli, którą można pokazać poniżej:

MySQL NA USUŃ KASKADĘ

Tabela: Płatność

Poniższa instrukcja tworzy tabelę Płatność:

 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 ); 

Następnie wykonaj wstaw oświadczenie aby wypełnić rekordy w tabeli.

 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'); 

Wykonaj zapytanie SELECT, aby zweryfikować dane w tabeli, którą można pokazać poniżej:

MySQL NA USUŃ KASKADĘ

Pozwól nam usuwać dane z tabeli nadrzędnej Pracownik. Aby to zrobić, wykonaj następującą instrukcję:

 mysql> DELETE FROM Employee WHERE emp_id = 102; 

Powyższe oświadczenie spowoduje usunięcie dokumentacji pracowniczej, której em_id = 102 I odwoływanie się dane do tabeli podrzędnej. Możemy zweryfikować dane za pomocą instrukcji SELECT, która da następujący wynik:

kolekcje Java
MySQL NA USUŃ KASKADĘ

W powyższym wyniku widzimy, że wszystkie wiersze odwołujące się do emp_id = 102 zostały automatycznie usunięte z obu tabel.

Jak znaleźć tabelę, której dotyczy problem, za pomocą akcji ON DELETE CASCADE?

Czasami przed usunięciem rekordów z tabeli chcemy poznać tabelę, której dotyczy problem, za pomocą akcji referencyjnej ON DELETE CASCADE. Możemy znaleźć te informacje, wysyłając zapytania do referential_constraints w bazie danych Information_schema w następujący sposób:

 USE information_schema; SELECT table_name FROM referential_constraints WHERE constraint_schema = 'database_name' AND referenced_table_name = 'parent_table' AND delete_rule = 'CASCADE' 

Poniższa instrukcja generuje wynik dotyczący tabel powiązanych z tabelą Pracownik za pomocą reguły ON DELETE CASCADE w pliku pracownikb Baza danych:

 USE information_schema; SELECT table_name FROM referential_constraints WHERE constraint_schema = 'employeedb' AND referenced_table_name = 'Employee' AND delete_rule = 'CASCADE'; 

Po wykonaniu powyższego polecenia otrzymamy poniższy wynik:

MySQL NA USUŃ KASKADĘ

MySQL W KASKADZIE AKTUALIZACJI

Klauzula ON UPDATE CASCADE w MySQL-a jest używany do aktualizacja pasujące rekordy z tabeli podrzędnej automatycznie, gdy aktualizujemy wiersze w tabeli nadrzędnej. Poniższy przykład wyjaśnia to jaśniej.

str.replace w Javie

Najpierw musimy skorzystać z ZMIEŃ TABELĘ instrukcja dodania klauzuli ON UPDATE CASCADE w tabeli Płatność jak poniżej:

 ALTER TABLE Payment ADD CONSTRAINT `payment_fk` FOREIGN KEY(emp_id) REFERENCES Employee (emp_id) ON UPDATE CASCADE; 

Da to następujące dane wyjściowe:

MySQL NA USUŃ KASKADĘ

W poniższym skrypcie zaktualizujemy identyfikator pracownika w tabeli nadrzędnej i automatycznie odzwierciedlimy tę zmianę również w tabeli podrzędnej:

 mysql> UPDATE Employee SET emp_id = 102 WHERE emp_id = 103; 

Sprawdzając zawartość tabeli Pracownik i Płatność, przekonamy się o tym em_id wartości kolumn zostaną pomyślnie zaktualizowane.

MySQL NA USUŃ KASKADĘ