Sprawdzanie klucza obcego w MySQL może uniemożliwić wykonanie niektórych aktualizacji bazy danych w tabelach, które mają ograniczenia dotyczące klucza obcego. W takich przypadkach możesz tymczasowo wyłączyć sprawdzanie klucza obcego w MySQL, dokonać aktualizacji i później włączyć sprawdzanie klucza obcego w MySQL. Oto jak wyłączyć ograniczenie klucza obcego w MySQL.
Jak wyłączyć sprawdzanie klucza obcego w MySQL
Oto kroki, aby wyłączyć sprawdzanie klucza obcego w MySQL.
Możesz wyłączyć sprawdzanie klucza obcego w MySQL, ustawiając zmienną systemową foreign_key_checks do 0.
SET foreign_key_checks = 0
Podobnie możesz włączyć sprawdzanie klucza obcego w MySQL, ustawiając zmienną systemową foreign_key_check do 1
SET foreign_key_checks = 1
Należy jednak pamiętać, że po włączeniu sprawdzania kluczy obcych MySQL nie będzie ponownie sprawdzać istniejących danych, które zostały dodane po wyłączeniu sprawdzania kluczy obcych. Sprawdza tylko wszelkie nowe dodatki/aktualizacje w Twojej bazie danych.
Przeczytaj bonus:Jak tworzyć sekwencję w MySQL
Spójrzmy na przykład. Załóżmy, że masz następujące dwie tabele kraje i miasta tak, że miasta ma kolumnę klucza obcego country_id który odnosi się do id_kraju w krajach
CREATE TABLE countries( country_id INT PRIMARY KEY AUTO_INCREMENT, country_name VARCHAR(255) NOT NULL );
CREATE TABLE cities( city_id INT PRIMARY KEY AUTO_INCREMENT, city_name VARCHAR(255), country_id INT, FOREIGN KEY(country_id) REFERENCES countries(country_id) );
Przeczytaj bonus:Jak porównać dwie tabele w MySQL
Teraz spróbujmy wstawić wiersz w miastach tabeli bez podania id_kraju wartość klucza obcego, a otrzymasz błąd, jak pokazano poniżej.
mysql> INSERT INTO cities(city_name, country_id) VALUES('NYC',1); ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`sample`.`cities`, CONSTRAINT `cities_ibfk_1` FOREIGN KEY (`country_id`) REFERENCES `countries` (`country_id`))
Teraz wyłączmy sprawdzanie klucza obcego w MySQL i spróbujmy ponownie wstawić wiersz.
mysql> SET foreign_key_checks = 0; mysql> INSERT INTO cities(city_name, country_id) VALUES('NYC',1); mysql> select * from cities; +---------+-----------+------------+ | city_id | city_name | country_id | +---------+-----------+------------+ | 2 | NYC | 1 | +---------+-----------+------------+
Teraz włączamy sprawdzanie obce w MySQL
mysql> SET foreign_key_checks = 1;
Przeczytaj bonus:Jak uzyskać dane z ostatniego miesiąca w MySQL
W końcu wstawiamy odpowiedni wiersz w krajach tabela.
mysql> INSERT INTO countries(country_id, country_name) VALUES(1,'USA'); mysql> select * from countries; +------------+--------------+ | country_id | country_name | +------------+--------------+ | 1 | USA | +------------+--------------+
Ubiq ułatwia wizualizację danych w ciągu kilku minut i monitorowanie w pulpitach nawigacyjnych w czasie rzeczywistym. Wypróbuj już dziś!