가짜 외래 키 제약 조건 실패
이 오류 메시지가 나타납니다.
40 번째 줄의 오류 1217 (23000) : 부모 행을 삭제하거나 업데이트 할 수 없음 : 외래 키 제약 조건이 실패 함
... 테이블을 삭제하려고 할 때 :
DROP TABLE IF EXISTS `area`;
... 다음과 같이 정의.
CREATE TABLE `area` (
`area_id` char(3) COLLATE utf8_spanish_ci NOT NULL,
`nombre_area` varchar(30) COLLATE utf8_spanish_ci NOT NULL,
`descripcion_area` varchar(100) COLLATE utf8_spanish_ci NOT NULL,
PRIMARY KEY (`area_id`),
UNIQUE KEY `nombre_area_UNIQUE` (`nombre_area`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci;
재미있는 점은 이미 외래 키가있는 스키마의 다른 모든 테이블 을 삭제 했다는 것입니다 area
. 실제로, area
테이블을 제외하고 데이터베이스가 비어 있습니다.
데이터베이스에있는 데이터베이스에 어떤 것이 있습니까? 내가 아는 한 InnoDB는 다른 스키마에서 외래 키를 허용하지 않습니까?
(나는 심지어 RENAME TABLE area TO something_else
명령을 수 있습니다 . :-?)
두 가지 가능성 :
- FK 참조가있는 다른 스키마 (mysql 용어의 "데이터베이스") 유전자 테이블이 있습니다.
- innodb 내부 데이터 딕셔너리는 mysql과 동기화되지 않습니다.
삭제가 실패한 후 "SHOW ENGINE INNODB STATUS"를 수행하여 어떤 테이블인지 (어느 테이블이든) 확인할 수 있습니다.
후자의 경우로 밝혀지면 가능한 경우 전체 서버를 구성하고 복원합니다.
MySQL 5.1 이상에서는 오류 메시지에 FK가 포함 된 테이블 이름이 표시됩니다.
온 디맨드로 이제 답변으로 ...
MySQL Query Browser 또는 phpMyAdmin을 사용하는 경우 각 쿼리마다 새 연결이 열려있는 것 ( bugs.mysql.com/bug.php?id=8280 )으로 인해 모든 드롭 문을 하나의 쿼리에 작성해야합니다.
SET FOREIGN_KEY_CHECKS=0;
DROP TABLE my_first_table_to_drop;
DROP TABLE my_second_table_to_drop;
SET FOREIGN_KEY_CHECKS=1;
SET FOREIGN_KEY_CHECKS=1
추가 보안 조치로 사용되는 곳 ...
외래 키 검사
SET FOREIGN_KEY_CHECKS=0
에서이 블로그 :
외래 키 검사를 일시적으로 할 수 있습니다.
SET FOREIGN_KEY_CHECKS=0;
엉망이 복원하십시오.
SET FOREIGN_KEY_CHECKS=1;
잘만 널 그 일
SET foreign_key_checks = 0; 드롭 테이블 table name
; SET foreign_key_checks = 1;
Rails에서는 다음을 사용하여 다음을 수행 할 수 있습니다 rails console
.
connection = ActiveRecord::Base.connection
connection.execute("SET FOREIGN_KEY_CHECKS=0;")
이 테이블로 작업하기 전에 오류가 발생했을 수 있습니다. 테이블 이름을 바꾸고 다시 제거 할 수 있습니다.
ALTER TABLE `area` RENAME TO `area2`;
DROP TABLE IF EXISTS `area2`;
쉬운 해결을 찾았고 데이터베이스를 작성 고 텍스트 편집기에서 편집하려는 편집 한 다음 가져옵니다. 끝난
부모 행을 삭제하거나 업데이트 할 수 없습니다. 외래 키 제약 조건이 실패합니다 ( table1
. user_role
, CONSTRAINT FK143BF46A8dsfsfds@#5A6BD60
FOREIGN KEY ( user_id
) REFERENCES user
( id
)).
내가 두 가지 간단한 단계로 수행 한 작업. 먼저 마이어 테이블에서 마이너스 행을 삭제합니다.
mysql> role2id = 2 && user_id = 20;
쿼리 OK, 영향을 받음 1 행 (0.10 초)
부모를 삭제하는 두 번째 단계
id = 20 인 table1에서 삭제;
쿼리 OK, 1 개 행이 영향을 받음 (0.12 초)
이것으로 나는 자식 삭제 다음 부모 삭제를 의미하는 문제를 해결합니다.
나는 당신이 그것을 얻길 바랍니다. :)
참고 URL : https://stackoverflow.com/questions/3334619/bogus-foreign-key-constraint-fail
'IT' 카테고리의 다른 글
PHP로 UTC 시간을 얻으십시오 (0) | 2020.07.30 |
---|---|
WPF 툴팁을 화면에 유지하도록 강제 (0) | 2020.07.30 |
키를 기준으로 사전 정렬 (0) | 2020.07.30 |
Brainfuck Hello World는 어떻게 작동 작동합니까? (0) | 2020.07.30 |
Android 사용자 정의 ListView가 항목을 클릭 할 수 없음 (0) | 2020.07.30 |