17
MySQL: Ignorowanie kluczy obcych podczas usuwania rekordu
0 Comments | Posted by admin in MySQL
Jeżeli nasza baza danych ma wiele tabel, które mają zdefiniowane klucze obce i trafi się sytuacja, że będziemy musieli usunąć jeden z rekordów z powiązanych tabel to otrzymamy komunikat o wystąpieniu błędu (kod #1451):
#1451: Cannot delete or update a parent row: a foreign key constraint fails [...]
Oznacza to, że w innej tabeli znajduje się rekord, który jest powiązany z rekordem, który chcemy usunąć. W tym wypadku prawidłowym działaniem jest usuwanie rekordów po kolei od tych leżących najniżej w „hierarchii”. Natomiast, jeżeli nie zależy nam na zachowaniu spójności wystarczy przed usunięciem rekordu wykonać zapytanie:
SET foreign_key_checks = 0;
Dzięki temu MySQL otrzyma informację, żeby nie sprawdzać kluczy obcych podczas wykonywania operacji na bazie i będziemy mogli bez trudu usunąć pożądany rekord. Aby jednak przypadkiem nie doprowadzić do większych problemów po wykonaniu usuwania należy wykonać zapytanie, które ponownie włączy weryfikację kluczy obcych:
SET foreign_key_checks = 1;

