Domanda

sto ottenendo questo errore in MySQL creare. Sto facendo:

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;

Tutte le idee? L'errore Uniti: Can't create table './xxxxxxxx/blogReply.frm' (errno: 121)

È stato utile?

Soluzione

Controllare che tutti i vincoli sono davvero scritte correttamente, anche controllare che non ci sia nessun altro tabelle che utilizza i nomi di vincolo FK_userId o FK_blogId

Altri suggerimenti

Errore 121 è una questione vincolo di chiave esterna. La prima cosa da controllare è che le definizioni stranieri chiave sono ok (tutte le tabelle e nomi dei campi siano corretti, ecc.).

Si può provare a disabilitare i controlli di chiave esterna prima di creare la tabella e, in questo modo:

SET FOREIGN_KEY_CHECKS = 0;

Che ha il lato negativo di gettare errori più tardi, quando si riattivare il controllo chiave (impostarlo a 1), tuttavia, se questo è il caso, allora significa che hai alcuni record non validi da qualche parte che interferiscono con la creazione di la chiave esterna.

Tuttavia, questo problema può verificarsi anche se si è stati spostare manualmente i file di database in giro, come ad esempio rinominare fisicamente la directory data/your_database_name. InnoDB non può correlare i cambiamenti fisici del genere per lo spazio tabella, in modo che mucks con gli interni.

Se questo è quello che hai fatto, la soluzione che funziona meglio è quella di spostare il vecchio database di nuovo a dove era, prendere una discarica o l'esportazione di esso, e fare un DROP DATABASE su di esso prima di ri-importazione.

Si prega di controllare che la chiave straniera che si sta creando è lo stesso in tutti gli aspetti, come tipo di dati con la colonna della tabella di cui. Ogni nome chiave esterna deve essere unico per tali tabelle in cui è creato, non dovrebbe essere usato in anyother tabelle. per il problema sopra il nome chiave esterna "FK_userId" non deve essere utilizzato in qualsiasi altra tabella.

In ho questo problema in MySQL 5.5, ma funziona bene in MySQL 5.6. Il problema è stato perché il nome del vincolo sembra essere unico, ma se questo è un nome lungo e viene troncato l'diventano non univoco, ad esempio:

long_constraint_name_1, long_constraint_name_2 può diventare long_constraint_name_

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top