Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak wyłączyć sprawdzanie klucza obcego w MySQL?

Sprawdzanie klucza obcego w MySQL może uniemożliwić wykonanie niektórych aktualizacji bazy danych w tabelach, które mają ograniczenia dotyczące klucza obcego. W takich przypadkach możesz tymczasowo wyłączyć sprawdzanie klucza obcego w MySQL, dokonać aktualizacji i później włączyć sprawdzanie klucza obcego w MySQL. Oto jak wyłączyć ograniczenie klucza obcego w MySQL.

Jak wyłączyć sprawdzanie klucza obcego w MySQL

Oto kroki, aby wyłączyć sprawdzanie klucza obcego w MySQL.

Możesz wyłączyć sprawdzanie klucza obcego w MySQL, ustawiając zmienną systemową foreign_key_checks do 0.

SET foreign_key_checks = 0

Podobnie możesz włączyć sprawdzanie klucza obcego w MySQL, ustawiając zmienną systemową foreign_key_check do 1

SET foreign_key_checks = 1

Należy jednak pamiętać, że po włączeniu sprawdzania kluczy obcych MySQL nie będzie ponownie sprawdzać istniejących danych, które zostały dodane po wyłączeniu sprawdzania kluczy obcych. Sprawdza tylko wszelkie nowe dodatki/aktualizacje w Twojej bazie danych.

Przeczytaj bonus:Jak tworzyć sekwencję w MySQL

Spójrzmy na przykład. Załóżmy, że masz następujące dwie tabele kraje i miasta tak, że miasta ma kolumnę klucza obcego country_id który odnosi się do id_kraju w krajach

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

Przeczytaj bonus:Jak porównać dwie tabele w MySQL

Teraz spróbujmy wstawić wiersz w miastach tabeli bez podania id_kraju wartość klucza obcego, a otrzymasz błąd, jak pokazano poniżej.

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

Teraz wyłączmy sprawdzanie klucza obcego w MySQL i spróbujmy ponownie wstawić wiersz.

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

Teraz włączamy sprawdzanie obce w MySQL

mysql> SET foreign_key_checks = 1;

Przeczytaj bonus:Jak uzyskać dane z ostatniego miesiąca w MySQL

W końcu wstawiamy odpowiedni wiersz w krajach tabela.

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

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

Ubiq ułatwia wizualizację danych w ciągu kilku minut i monitorowanie w pulpitach nawigacyjnych w czasie rzeczywistym. Wypróbuj już dziś!

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Powielanie tabeli, indeksów i danych MySQL

  2. Zwróć n-ty rekord z zapytania MySQL

  3. MySQL ładuje wartości NULL z danych CSV

  4. Konfiguracje wielu centrów danych przy użyciu klastra Galera dla MySQL lub MariaDB

  5. Plik PHP nie może wprowadzić jakiejś części kodu