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!