잘 검색했지만 문제를 잘 설명하는 대답을 찾을 수 없습니다. 다음은 간단한 문제 예제입니다. 테이블 test
과 first
및 second
의 두 필드가 있다고 가정 해 봅시다. 나는 first
을 기본 키로 만들고 second
을 참조하여 first
을 참조하고 업데이트를 캐스케이드합니다. 이렇게하면 'head'가 아닌 한 주어진 행 다음에 오는 행을 알면서 행 목록을 만들 수 있습니다.외래 키 동일한 테이블 참조
테이블을 만들면 문제가 없지만 행을 추가하려고하면 계단식 업데이트로 외래 키 제약 조건이 실패했다고 불평합니다. 이것은 내가 second
을 null로 남겨 두었던 것처럼 의미가 있습니다. 따라서, 나는 두 행을 삽입 한 후 외부 키를 추가 할 수 있다고 생각 :
first: a second: b
first: b second: a
이 성공적이었다. 그런 다음 행 1을 업데이트하여 first
값이 c
이되도록했습니다. 그러나 이것은 작동하지 않았으며 외래 키가 실패했다는 것을 나타냅니다. 왜? 다음과 같이되어야하지 않습니까?
first: c second: b
first: b second: c
내 유일한 직감 1 행 다시 계단식, 2 행 1 계단식 업데이트 행에 원형 업데이트의 존재를하지만, 이런 일이 안됩니다! 업데이트는 second
을 참조하는 것이 없으므로 업데이트는 2 행으로 캐스케이드하고 중지되어야합니다. 제발 도와 줘요,이게 제 정신이 아니에요.
편집 : 요청한대로 여기 내 show create table test
입니다.
CREATE TABLE `test` (
`first` varchar(32) NOT NULL,
`second` varchar(32) NOT NULL,
PRIMARY KEY (`first`),
KEY `fk` (`second`),
CONSTRAINT `fk` FOREIGN KEY (`second`) REFERENCES `test` (`first`) ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1
기본 키는 1 행에는 c, 2 행에는 b가 될 것이므로 null이 아닙니다. 또한 참조하는 열에도 null 값이 없습니다. 1 행은 b이고 2 행은 c입니다. –
null 값은 없지만? 구조를보기 위해서'show create table test '를 붙여 주시겠습니까? 감사합니다 –
확실히, 결과와 함께 내 질문을 편집했습니다. –