sql >> Database teknologi >  >> RDS >> Mysql

Sådan deaktiveres tjek af fremmed nøgle i MySQL

Foreign Key Check i MySQL kan forhindre dig i at lave nogle databaseopdateringer til tabeller, der har fremmednøglebegrænsninger. I sådanne tilfælde kan du midlertidigt deaktivere tjek af fremmed nøgle i MySQL, foretage dine opdateringer og aktivere tjek af fremmed nøgle i MySQL bagefter. Sådan deaktiverer du begrænsning af fremmednøgle i MySQL.

Sådan deaktiverer du tjek af fremmed nøgle i MySQL

Her er trinene til at deaktivere tjek af fremmed nøgle i MySQL.

Du kan deaktivere tjek af fremmed nøgle i MySQL ved at indstille systemvariablen foreign_key_checks til 0.

SET foreign_key_checks = 0

På samme måde kan du aktivere tjek af fremmed nøgle i MySQL ved at indstille systemvariablen foreign_key_check til 1

SET foreign_key_checks = 1

Bemærk dog, at efter du har aktiveret kontrol af fremmed nøgle, vil MySQL ikke genvalidere dine eksisterende data, som du tilføjede efter at have deaktiveret kontrol af fremmed nøgle. Det vil kun kontrollere eventuelle nye tilføjelser/opdateringer til din database.

Bonus Læs:Sådan opretter du sekvens i MySQL

Lad os se på et eksempel. Lad os sige, at du har følgende to tabeller lande og byer sådan at byer har en fremmednøglekolonne country_id der henviser til country_id i lande

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:Sådan sammenlignes to tabeller i MySQL

Lad os nu prøve at indsætte en række i byer tabel uden at nævne country_id fremmednøgleværdi, og du vil få en fejl som vist nedenfor.

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

Lad os nu deaktivere tjek af fremmednøgle i MySQL og prøv at indsætte rækken 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 aktiverer vi udenlandsk check i MySQL

mysql> SET foreign_key_checks = 1;

Bonuslæser:Sådan får du sidste måneds data i MySQL

Vi indsætter endelig en tilsvarende række i lande tabel.

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 nemt at visualisere data på få minutter og overvåge i dashboards i realtid. Prøv det i dag!

  1. Administration af brugerkonti, roller, tilladelser, godkendelse PHP og MySQL - Del 3

  2. NAME_IN indbygget i Oracle D2k Forms

  3. Hvad er forskellene mellem INSERT og UPDATE i MySQL?

  4. Reneste måde at bygge en SQL-streng i Java