왜하지 않는 TRUNCATE 에 대한 mygroup
작업은? 내가 가지고 있지만 ON DELETE CASCADE SET
:
오류 1701 (42000) : 외래 키 제약 조건 (
mytest
.instance
, CONSTRAINTinstance_ibfk_1
FOREIGN KEY (GroupID
) REFERENCESmytest
.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:
- 구속 조건 제거
- 행하다
TRUNCATE
- 이제 아무데도 참조가 없는 행을 수동으로 삭제하십시오.
- 구속 조건 작성
옵션 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을 사용하는 경우 데이터베이스를 열고 잘라내려는 테이블을 선택하면됩니다.
- 하단에는 많은 옵션이있는 드롭 다운이 있습니다. 그것을 열고
Empty
제목 아래 에서 옵션을 선택하십시오Delete data or table
. - 확인란이라는 옵션이있는 경우 다음 페이지로 자동 이동
Enable foreign key checks
합니다. 선택을 해제하고Yes
버튼을 누르면 선택한 테이블이 잘립니다.
아마도 내부적으로 user447951의 답변 에서 제안 된 쿼리를 실행 하지만 phpMyAdmin 인터페이스에서 사용하는 것이 매우 편리합니다.