[mysql] 외래 키 제한 테이블을 자르는 방법?

왜하지 않는 TRUNCATE 에 대한 mygroup작업은? 내가 가지고 있지만 ON DELETE CASCADE SET:

오류 1701 (42000) : 외래 키 제약 조건 ( mytest. instance, CONSTRAINT instance_ibfk_1FOREIGN KEY ( GroupID) REFERENCES mytest. mygroup( ID)) 에서 참조 된 테이블을자를 수 없습니다 .

drop database mytest;
create database mytest;
use mytest;

CREATE TABLE mygroup (
   ID    INT NOT NULL AUTO_INCREMENT PRIMARY KEY
) ENGINE=InnoDB;

CREATE TABLE instance (
   ID           INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
   GroupID      INT NOT NULL,
   DateTime     DATETIME DEFAULT NULL,

   FOREIGN KEY  (GroupID) REFERENCES mygroup(ID) ON DELETE CASCADE,
   UNIQUE(GroupID)
) ENGINE=InnoDB;



답변

당신은 할 수없는 TRUNCATE그것을 적용 FK 제약 조건이있는 테이블 ( TRUNCATE동일하지 않습니다 DELETE).

이 문제를 해결하려면 다음 솔루션 중 하나를 사용하십시오. 두 가지 모두 데이터 무결성을 손상시킬 위험이 있습니다.

옵션 1:

  1. 구속 조건 제거
  2. 행하다 TRUNCATE
  3. 이제 아무데도 참조가 없는 행을 수동으로 삭제하십시오.
  4. 구속 조건 작성

옵션 2 : 답변 에서 user447951제안 함

SET FOREIGN_KEY_CHECKS = 0;
TRUNCATE table $table_name;
SET FOREIGN_KEY_CHECKS = 1;


답변

그래 넌 할수있어:

SET FOREIGN_KEY_CHECKS = 0;

TRUNCATE table1;
TRUNCATE table2;

SET FOREIGN_KEY_CHECKS = 1;

이 명령문을 사용하면 FOREIGN KEY제한 조건을 준수하지 않는 테이블에 행을 넣을 위험이 있습니다.


답변

나는 단순히 다음과 같이 할 것이다.

DELETE FROM mytest.instance;
ALTER TABLE mytest.instance AUTO_INCREMENT = 1;


답변

넌 할 수있어

DELETE FROM `mytable` WHERE `id` > 0


답변

당으로 MySQL의 문서 , TRUNCATE는 외래 키 관계가있는 테이블에 사용할 수 없습니다. 완전한 대안 AFAIK가 없습니다.

제약 조건을 삭제해도 여전히 ON DELETE 및 ON UPDATE가 호출되지 않습니다. ATM에서 생각할 수있는 유일한 솔루션은 다음 중 하나입니다.

  • 모든 행을 삭제하고 외래 키를 삭제하고 자르고 키를 다시 만듭니다.
  • 모든 행을 삭제하고 auto_increment를 재설정하십시오 (사용 된 경우).

MySQL의 TRUNCATE는 아직 완전한 기능이 아닙니다 (트리거를 호출하지도 않습니다).
의견보기


답변

phpMyAdmin을 사용하면 쉽습니다.

탭에서 Enable foreign key checks옵션을 선택 취소 SQL하고 실행하십시오.TRUNCATE <TABLE_NAME>

여기에 이미지 설명을 입력하십시오


답변

이 질문에 대해 알지 못했지만 phpMyAdmin을 사용하는 경우 데이터베이스를 열고 잘라내려는 테이블을 선택하면됩니다.

  • 하단에는 많은 옵션이있는 드롭 다운이 있습니다. 그것을 열고 Empty제목 아래 에서 옵션을 선택하십시오 Delete data or table.
  • 확인란이라는 옵션이있는 경우 다음 페이지로 자동 이동 Enable foreign key checks합니다. 선택을 해제하고 Yes버튼을 누르면 선택한 테이블이 잘립니다.

아마도 내부적으로 user447951의 답변 에서 제안 된 쿼리를 실행 하지만 phpMyAdmin 인터페이스에서 사용하는 것이 매우 편리합니다.