MySQL에서 외래 키 제약 조건 끄기

Mehvish Ashiq 2024년2월15일
  1. MySQL에서 외래 키 제약 조건 끄기
  2. MySQL에서 외래 키를 끄도록 FOREIGN_KEY_CHECKS를 설정합니다.
MySQL에서 외래 키 제약 조건 끄기

오늘은 MySQL Workbench에서 FOREIGN_KEY_CHECKS를 사용하여 MySQL에서 외래 키 제약 조건을 일시적으로 해제하는 방법을 배웁니다.

MySQL에서 외래 키 제약 조건 끄기

일시적으로 외래 키를 해제하는 다양한 상황이 있습니다. 예를 들어, 어떤 순서로든 부모자식 테이블에 데이터를 로드합니다.

이 경우 FOREIGN_KEY_CHECKS를 사용하여 MySQL 서버에서 외래 키 제약 조건을 끌 수 있습니다. 이를 알아보기 위해 두 개의 테이블을 만들고 먼저 채워 보겠습니다.

예제 코드:

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

예제 코드:

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

SELECT 명령을 사용하여 두 테이블의 현재 데이터를 확인하십시오.

SELECT * FROM student;
SELECT * FROM course;

출력(student 테이블의 경우):

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

출력(코스 테이블의 경우):

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

MySQL에서 외래 키를 끄도록 FOREIGN_KEY_CHECKS를 설정합니다.

자바 프로그래밍에 등록하려는 다른 학생이 있다고 가정해 보겠습니다. 이번에는 하위 테이블(course 테이블)에 해당 레코드를 먼저 삽입하려고 합니다.

예제 코드:

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

course 테이블에 레코드를 삽입하기 위해 쿼리를 실행하자마자 다음 오류가 생성됩니다.

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

이는 course 테이블에 외래 키가 있기 때문에 발생합니다. 따라서 다음과 같이 외래 키 검사를 비활성화할 수 있습니다.

SET foreign_key_checks = 0;

이제 course 테이블에 다시 삽입하십시오.

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

이번에는 레코드가 성공적으로 삽입되었습니다. SELECT 명령을 사용하여 삽입을 확인하십시오.

SELECT * from course;

출력(코스 테이블의 경우):

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

외래 키 제약 검사를 다시 활성화하려면 FOREIGN_KEY_CHECKS의 값을 1로 설정하는 것을 잊지 마십시오.

SET foreign_key_checks = 1;

phpMyAdmin에서 동일한 명령을 사용할 수도 있지만 다음 스크린샷에서 강조 표시된 옵션을 선택 취소해야 합니다.

mysql에서 외래 키 제약 조건 해제 - phpmyadmin에서 외래 키 비활성화

FOREIGN_KEY_CHECKS의 값을 다시 1로 설정하면 외래 키 검사를 끈 후 삽입한 현재 데이터에 대한 유효성 검사가 트리거되지 않습니다.

데이터베이스에 대한 새 업데이트 및 추가 사항만 확인합니다. 또한 FOREIGN_KEY_CHECKS를 사용하여 외래 키 제약 조건을 전역적으로 비활성화할 수 있습니다.

예제 코드:

# 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

관련 문장 - MySQL Key