sql >> Databasteknik >  >> RDS >> Mysql

Hur man inaktiverar kontroll av främmande nyckel i MySQL

Kontroll av främmande nyckel i MySQL kan hindra dig från att göra vissa databasuppdateringar till tabeller som har begränsningar för främmande nyckel. I sådana fall kan du tillfälligt inaktivera kontroll av främmande nyckel i MySQL, göra dina uppdateringar och aktivera kontroll av främmande nyckel i MySQL efteråt. Så här inaktiverar du begränsning av främmande nyckel i MySQL.

Hur man inaktiverar kontroll av främmande nyckel i MySQL

Här är stegen för att inaktivera kontroll av främmande nyckel i MySQL.

Du kan inaktivera kontroll av främmande nyckel i MySQL genom att ställa in systemvariabeln foreign_key_checks till 0.

SET foreign_key_checks = 0

På samma sätt kan du aktivera kontroll av främmande nyckel i MySQL genom att ställa in systemvariabeln foreign_key_check till 1

SET foreign_key_checks = 1

Observera dock att efter att du har aktiverat kontroller av främmande nycklar, kommer MySQL inte att omvalidera dina befintliga data som du lade till efter att ha inaktiverat kontroll av främmande nyckel. Det kommer bara att kontrollera eventuella nya tillägg/uppdateringar till din databas.

Bonus Läs:Hur man skapar sekvens i MySQL

Låt oss titta på ett exempel. Låt oss säga att du har följande två tabeller länder och städer så att städer har en främmande nyckelkolumn country_id som hänvisar till country_id i länder

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)
);

Bonus Läs:Hur man jämför två tabeller i MySQL

Låt oss nu försöka infoga en rad i städer tabellen utan att nämna country_id främmande nyckelvärde och du får ett felmeddelande som visas nedan.

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`))

Låt oss nu inaktivera kontrollen av främmande nyckel i MySQL och försöka infoga raden igen.

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 |
+---------+-----------+------------+

Nu aktiverar vi utländsk check i MySQL

mysql> SET foreign_key_checks = 1;

Bonus Läs:Hur man får senaste månadsdata i MySQL

Vi infogar slutligen en motsvarande rad i länder bord.

mysql> INSERT INTO countries(country_id, country_name)
       VALUES(1,'USA');

mysql> select * from countries;
+------------+--------------+
| country_id | country_name |
+------------+--------------+
|          1 | USA          |
+------------+--------------+

Ubiq gör det enkelt att visualisera data på några minuter och övervaka i realtidsinstrumentpaneler. Prova det idag!

  1. Tillkännager ClusterControl 1.7.5:Avancerat klusterunderhåll och support för PostgreSQL 12 och MongoDB 4.2

  2. Hur man installerar och säkrar MariaDB på CentOS 7

  3. SQL Server Query timeout beroende på Where Clause

  4. Hur tar man bort ett enumtypvärde i postgres?