Kontrola cizího klíče v MySQL vám může zabránit v provádění některých aktualizací databáze u tabulek, které mají omezení cizího klíče. V takových případech můžete dočasně zakázat kontrolu cizího klíče v MySQL, provést aktualizace a poté kontrolu cizího klíče v MySQL povolit. Zde je návod, jak deaktivovat omezení cizího klíče v MySQL.
Jak zakázat kontrolu cizího klíče v MySQL
Zde jsou kroky k zakázání kontroly cizího klíče v MySQL.
Kontrolu cizího klíče v MySQL můžete zakázat nastavením systémové proměnné foreign_key_checks na 0.
SET foreign_key_checks = 0
Podobně můžete povolit kontrolu cizího klíče v MySQL nastavením systémové proměnné foreign_key_check do 1
SET foreign_key_checks = 1
Upozorňujeme však, že poté, co povolíte kontrolu cizího klíče, MySQL znovu neověří vaše stávající data, která jste přidali po zakázání kontroly cizího klíče. Zkontroluje pouze všechny nové přírůstky/aktualizace do vaší databáze.
Bonusové čtení:Jak vytvořit sekvenci v MySQL
Podívejme se na příklad. Řekněme, že máte následující dvě tabulky zemí a města tak, že města má sloupec cizího klíče country_id který odkazuje na country_id v zemích
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)
);
Bonusové čtení:Jak porovnat dvě tabulky v MySQL
Nyní zkusme vložit řádek do měst tabulka bez uvedení country_id hodnotu cizího klíče a zobrazí se chyba, jak je uvedeno níže.
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`))
Nyní deaktivujeme kontrolu cizího klíče v MySQL a zkusíme vložit řádek znovu.
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 |
+---------+-----------+------------+
Nyní povolujeme cizí kontrolu v MySQL
mysql> SET foreign_key_checks = 1;
Bonusové čtení:Jak získat data za poslední měsíc v MySQL
Nakonec vložíme odpovídající řádek v zemích tabulka.
mysql> INSERT INTO countries(country_id, country_name)
VALUES(1,'USA');
mysql> select * from countries;
+------------+--------------+
| country_id | country_name |
+------------+--------------+
| 1 | USA |
+------------+--------------+
Ubiq usnadňuje vizualizaci dat během několika minut a sledování na řídicích panelech v reálném čase. Vyzkoušejte to ještě dnes!