programing

MySQL 오류 121

subpage 2023. 10. 21. 10:27
반응형

MySQL 오류 121

MySQL 생성에서 이 오류가 발생합니다.저는 하고 있어요.

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 DATABASEimporting을 다시 하기 전에 그 위에.

당신이 작성중인 외국키가 참조된 테이블열로 데이터타입 등 모든 면에서 동일한지 확인해주시기 바랍니다.각 외부 키 이름은 해당 이름이 생성된 테이블에 대해 고유해야 하며 다른 테이블에서는 사용할 수 없습니다.위 문제에 대해 "FK_userId"라는 외부 키 이름을 다른 테이블에 사용해서는 안 됩니다.

나는 mysql 5.5에서 이 문제가 있지만 mysql 5.6에서는 잘 작동합니다.제약 조건 이름이 고유한 것처럼 보이지만 이 이름이 긴 이름이고 잘린 경우 다음과 같이 고유하지 않게 됩니다.

long_constraint_name_1,long_constraint_name_2될 수도 있습니다long_constraint_name_

언급URL : https://stackoverflow.com/questions/1180660/mysql-errorno-121

반응형