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

Come disabilitare il controllo della chiave esterna in MySQL

Il controllo della chiave esterna in MySQL può impedirti di apportare alcuni aggiornamenti del database alle tabelle che hanno vincoli di chiave esterna. In questi casi, puoi disabilitare temporaneamente il controllo della chiave esterna in MySQL, effettuare gli aggiornamenti e abilitare il controllo della chiave esterna in MySQL in seguito. Ecco come disabilitare il vincolo della chiave esterna in MySQL.

Come disabilitare il controllo della chiave esterna in MySQL

Ecco i passaggi per disabilitare il controllo della chiave esterna in MySQL.

Puoi disabilitare il controllo della chiave esterna in MySQL impostando la variabile di sistema foreign_key_checks a 0.

SET foreign_key_checks = 0

Allo stesso modo, puoi abilitare il controllo della chiave esterna in MySQL impostando la variabile di sistema foreign_key_check a 1

SET foreign_key_checks = 1

Tuttavia, tieni presente che, dopo aver abilitato i controlli della chiave esterna, MySQL non riconvaliderà i dati esistenti che hai aggiunto dopo aver disabilitato il controllo della chiave esterna. Controllerà solo eventuali nuove aggiunte/aggiornamenti al tuo database.

Bonus Leggi:Come creare una sequenza in MySQL

Diamo un'occhiata a un esempio. Supponiamo che tu abbia le seguenti due tabelle paesi e città tali che città ha una colonna di chiave esterna country_id che si riferisce a country_id nei paesi

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 Leggi:Come confrontare due tabelle in MySQL

Ora proviamo a inserire una riga in città tabella senza menzionare il country_id valore della chiave esterna e riceverai un errore come mostrato di seguito.

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

Ora disabilitiamo il controllo della chiave esterna in MySQL e proviamo a inserire nuovamente la riga.

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

Ora abilitiamo il controllo esterno in MySQL

mysql> SET foreign_key_checks = 1;

Bonus Leggi:Come ottenere i dati dell'ultimo mese in MySQL

Infine inseriamo una riga corrispondente in paesi tabella.

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

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

Ubiq semplifica la visualizzazione dei dati in pochi minuti e il monitoraggio in dashboard in tempo reale. Provalo oggi!