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!