sql >> Databáze >  >> RDS >> Mysql

Jak zakázat kontrolu cizího klíče v MySQL

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!

  1. Jak najít výchozí umístění souboru pro datové soubory a soubory protokolu na serveru SQL Server

  2. Jak extrahovat nebo převádět časová data z řetězce v SQL Server

  3. Nahrazení textu ve sloupci BLOB

  4. Jak mohu vložit 10 milionů záznamů v co nejkratším čase?