MySQL Errorno 121
-
19-09-2019 - |
문제
MySQL Create 에서이 오류가 발생합니다. 나는 일을 해요:
CREATE TABLE `blogReply` (
`Id` INT(24) NOT NULL AUTO_INCREMENT COMMENT 'Primary Key of This Table',
`blogId` INT(24) NOT NULL COMMENT 'Blog where this reply was posted',
`userId` INT(24) NULL COMMENT 'User the blog was posted by',
`name` VARCHAR(100) NULL DEFAULT 'Unknown' COMMENT 'The Name of the user that the reply was posted by',
`email` VARCHAR(100) NULL DEFAULT 'Unknown' COMMENT 'The Email of the user that the reply was posted by',
`http` VARCHAR(300) NULL DEFAULT 'Unknown' COMMENT 'The Webaddress of the user that the reply was posted by',
`message` TEXT NOT NULL COMMENT 'text of the blog',
`votes` INT(10) DEFAULT 0 COMMENT 'Rating of the Blog',
`ratedBy` TEXT COMMENT 'People who have already Voted on this blog',
`dateReg` BIGINT NOT NULL COMMENT 'Date the User was Registered',
PRIMARY KEY (`Id`),
CONSTRAINT `FK_userId` FOREIGN KEY(`userId`)
REFERENCES `user` (`Id`)
ON DELETE SET NULL
ON UPDATE CASCADE,
CONSTRAINT `FK_blogId` FOREIGN KEY(`blogId`)
REFERENCES `blog` (`Id`)
ON DELETE CASCADE
ON UPDATE CASCADE
) ENGINE = InnoDB;
어떤 아이디어? 오류가 표시됩니다. Can't create table './xxxxxxxx/blogReply.frm' (errno: 121)
해결책
모든 제약 조건이 실제로 올바르게 철자를 맞추고 있는지 확인하고 제약 조건 이름 FK_USERID 또는 FK_BLOGID를 사용하는 다른 테이블이 없는지 확인하십시오.
다른 팁
오류 121은 외국의 주요 제약 문제입니다. 가장 먼저 확인해야 할 것은 외국 키 정의가 정상이라는 것입니다 (모든 테이블과 필드 이름이 정확합니다).
테이블을 만들기 전에 외국 키 점검을 비활성화 할 수 있습니다.
SET FOREIGN_KEY_CHECKS = 0;
키 점검을 다시 활성화 할 때 (1로 설정) 나중에 던지는 오류의 단점이 있지만, 그렇다면이 경우 외국 키 생성을 방해하는 어딘가에 유효하지 않은 레코드가 있음을 의미합니다. .
그러나이 문제는 데이터베이스 파일을 수동으로 이동하는 경우 물리적으로 이름을 바꾸는 것과 같은 경우에도 발생할 수 있습니다. data/your_database_name
예배 규칙서. InnoDB는 이와 같은 물리적 변화를 테이블 스페이스와 관련시킬 수 없으므로 내부와 관련이 있습니다.
이것이 당신이 한 일이라면, 가장 잘 맞는 솔루션은 이전 데이터베이스를 어디로 가고, 덤프 또는 내보내기를하고, DROP DATABASE
다시 인상하기 전에.
당신이 만든 외국 키는 참조 테이블 열이있는 데이터 유형과 같은 모든 측면에서 동일인지 확인하십시오. 각 외국 키 이름은 생성 된 테이블에 대해 고유해야하며, 다른 테이블에 사용해서는 안됩니다. 위의 문제의 경우 다른 테이블에서는 외국 키 이름 "FK_USERID"를 사용해서는 안됩니다.
MySQL 5.5 에서이 문제는 MySQL 5.6에서 잘 작동합니다. 문제는 제약 이름이 독특한 것처럼 보이지만 이것이 긴 이름이고 잘린 경우에는 독창적이지 않기 때문입니다.
long_constraint_name_1
, long_constraint_name_2
될 수 있습니다 long_constraint_name_