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ś!