문제

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_

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top