Deaktivieren Sie die Fremdschlüsselbeschränkung in MySQL
- Deaktivieren Sie die Fremdschlüsselbeschränkung in MySQL
-
Stellen Sie
FOREIGN_KEY_CHECKS
ein, um den Fremdschlüssel in MySQL auszuschalten
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.
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;