Deaktivieren Sie die Fremdschlüsselbeschränkung in MySQL

Mehvish Ashiq 15 Februar 2024
  1. Deaktivieren Sie die Fremdschlüsselbeschränkung in MySQL
  2. Stellen Sie FOREIGN_KEY_CHECKS ein, um den Fremdschlüssel in MySQL auszuschalten
Deaktivieren Sie die Fremdschlüsselbeschränkung in MySQL

Heute werden wir lernen, FOREIGN_KEY_CHECKS in MySQL Workbench zu verwenden, um Fremdschlüsselbeschränkungen in MySQL vorübergehend auszuschalten.

Deaktivieren Sie die Fremdschlüsselbeschränkung in MySQL

Es gibt verschiedene Situationen, in denen wir die Fremdschlüssel vorübergehend deaktivieren. Laden Sie beispielsweise Daten in beliebiger Reihenfolge in die Tabellen Eltern und Kind.

In diesem Fall können wir die FOREIGN_KEY_CHECKS verwenden, um Fremdschlüsseleinschränkungen in MySQL Server auszuschalten. Um das zu lernen, erstellen wir zwei Tabellen und füllen sie zuerst.

Beispielcode:

# create a `student` table
CREATE TABLE student(
    student_id INT NOT NULL PRIMARY KEY,
    student_name VARCHAR(255) NOT NULL
);

# create a `course` table
CREATE TABLE course(
    course_id INT NOT NULL PRIMARY KEY,
    course_name VARCHAR(255),
    student_id INT,
    FOREIGN KEY(student_id)
	REFERENCES student(student_id)
);

Beispielcode:

# insert data into the `student` table
INSERT INTO student(student_id, student_name)
VALUES
(1, 'Maryam Taymor'),
(2, 'Mehvish Ashiq'),
(3, 'James Daniel'),
(4, 'Rahul Agarwal');

# insert data into the `course` table
INSERT INTO course(course_id, course_name, student_id)
VALUES
(1, 'Java Programming', 4),
(2, 'Data Science', 3),
(3, 'Computer Vision', 2),
(4, 'Python Programming', 1);

Verwenden Sie den Befehl SELECT, um die aktuellen Daten in beiden Tabellen anzuzeigen.

SELECT * FROM student;
SELECT * FROM course;

Ausgabe (für Tabelle student):

+------------+---------------+
| student_id | student_name  |
+------------+---------------+
|          1 | Maryam Taymor |
|          2 | Mehvish Ashiq |
|          3 | James Daniel  |
|          4 | Rahul Agarwal |
+------------+---------------+
4 rows in set (0.00 sec)

Ausgabe (für Tabelle Kurs):

+-----------+----------------------+------------+
| course_id | course_name          | student_id |
+-----------+----------------------+------------+
|         1 | Java Programming     |          4 |
|         2 | Data Science         |          3 |
|         3 | Computer Vision      |          2 |
|         4 | Python Programming   |          1 |
+-----------+----------------------+------------+
4 rows in set (0.00 sec)

Stellen Sie FOREIGN_KEY_CHECKS ein, um den Fremdschlüssel in MySQL auszuschalten

Angenommen, wir haben einen anderen Studenten, der sich in Java-Programmierung anmelden möchte. Dieses Mal wollen wir diesen Datensatz zuerst in die untergeordnete Tabelle (Kurs-Tabelle) einfügen.

Beispielcode:

INSERT INTO course(course_id,course_name, student_id)
VALUES
(5, 'Java Programming', 5);

Sobald wir die Abfrage zum Einfügen des Datensatzes in die Tabelle Kurs ausführen, wird der folgende Fehler generiert.

ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`ms23`.`course`, CONSTRAINT `course_ibfk_1` FOREIGN KEY (`student_id`) REFERENCES `student` (`student_id`))

Dies geschieht aufgrund eines Fremdschlüssels in der Tabelle Kurs. Wir können also die Fremdschlüsselprüfungen wie folgt deaktivieren.

SET foreign_key_checks = 0;

Fügen Sie ihn nun wieder in die Tabelle Kurs ein.

INSERT INTO course(course_id,course_name, student_id)
VALUES
(5, 'Java Programming', 5);

Diesmal wird der Datensatz erfolgreich eingefügt. Bestätigen Sie das Einfügen mit dem Befehl SELECT.

SELECT * from course;

Ausgabe (für Tabelle Kurs):

+-----------+----------------------+------------+
| course_id | course_name          | student_id |
+-----------+----------------------+------------+
|         1 | Java Programming     |          4 |
|         2 | Data Science         |          3 |
|         3 | Computer Vision      |          2 |
|         4 | Python Programming   |          1 |
|         5 | Java Programming     |          5 |
+-----------+----------------------+------------+
5 rows in set (0.00 sec)

Vergessen Sie nicht, den Wert von FOREIGN_KEY_CHECKS auf 1 zu setzen, um die Fremdschlüssel-Einschränkungsprüfung wieder zu aktivieren.

SET foreign_key_checks = 1;

Wir können die gleichen Befehle auch in phpMyAdmin verwenden, aber achten Sie darauf, die im folgenden Screenshot hervorgehobene Option zu DEAKTIVIEREN.

Deaktivieren Sie die Fremdschlüsselbeschränkung in mysql - Deaktivieren Sie den Fremdschlüssel in phpmyadmin

Denken Sie daran, wenn wir den Wert von FOREIGN_KEY_CHECKS auf 1 zurücksetzen, löst dies keine Validierung der aktuellen Daten aus, die wir nach dem Deaktivieren der Fremdschlüsselprüfungen eingefügt haben.

Es prüft nur die neuen Aktualisierungen und Ergänzungen der Datenbank. Wir können auch die FOREIGN_KEY_CHECKS verwenden, um Fremdschlüsseleinschränkungen global zu deaktivieren.

Beispielcode:

# turn off foreign key constraints globally
SET GLOBAL FOREIGN_KEY_CHECKS=0;
# turn on foreign key constraints globally
SET GLOBAL FOREIGN_KEY_CHECKS=1;
Mehvish Ashiq avatar Mehvish Ashiq avatar

Mehvish Ashiq is a former Java Programmer and a Data Science enthusiast who leverages her expertise to help others to learn and grow by creating interesting, useful, and reader-friendly content in Computer Programming, Data Science, and Technology.

LinkedIn GitHub Facebook

Verwandter Artikel - MySQL Key