0

我有了這個MySQL錯誤150以夷鍵

CREATE TABLE IF NOT EXISTS `beta`.`msg_messages` (
    `id_msg` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT , 
    `id_user_from` BIGINT(20) UNSIGNED NOT NULL , 
    `subject` VARCHAR(200) NOT NULL , 
    `body` TEXT NOT NULL , 
    `date` DATETIME NOT NULL , 
    PRIMARY KEY (`id_msg`) , 
    INDEX fk_msg_messages_user (`id_user_from` ASC) , 
    INDEX fk_msg_messages_msg_messages_users (`id_msg` ASC) , 
    CONSTRAINT `fk_msg_messages_user` 
    FOREIGN KEY (`id_user_from`) 
    REFERENCES `beta`.`user` (`id`) 
    ON DELETE CASCADE 
    ON UPDATE CASCADE, 
    CONSTRAINT `fk_msg_messages_msg_messages_users` 
    FOREIGN KEY (`id_msg`) 
    REFERENCES `beta`.`msg_messages_users` (`id_msg`) 
    ON DELETE CASCADE 
    ON UPDATE CASCADE) 
ENGINE = InnoDB 

*這是我的錯誤。這些也是我的用戶和msg_messages_users表。我查看了所有的表格,但無法看到我的錯誤。我在MysqlWorbench上工作,它會產生這個錯誤的sintax。*

錯誤1005:無法創建表'beta.msg_messages'(errno:150)。

CREATE TABLE IF NOT EXISTS `beta`.`user` (
    `id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT , 
    `username` VARCHAR(100) NOT NULL , 
    PRIMARY KEY (`id`) , 
ENGINE = InnoDB 
AUTO_INCREMENT = 87 
DEFAULT CHARACTER SET = utf8; 

CREATE TABLE IF NOT EXISTS `beta`.`msg_messages_users` (
     `id` BIGINT UNSIGNED NOT NULL , 
     `id_usr_to` BIGINT(20) UNSIGNED NOT NULL , 
     `id_msg` BIGINT(20) UNSIGNED NOT NULL , 
     `status` TINYINT NOT NULL DEFAULT 0 , 
     `date` DATETIME NOT NULL , 
     PRIMARY KEY (`id`) , 
     INDEX fk_msg_messages_users_user (`id_usr_to` ASC) , 
     CONSTRAINT `fk_msg_messages_users_user` 
     FOREIGN KEY (`id_usr_to`) 
     REFERENCES `beta`.`user` (`id`) 
     ON DELETE NO ACTION 
     ON UPDATE NO ACTION) 
    ENGINE = InnoDB; 
+0

也許'id_msg BIGINT( 20)UNSIGNED NOT NULL AUTO_INCREMENT'應該只是'id_msg BIGINT(20)UNSIGNED NOT NULL'。自動增量的列如何引用其他表? – SparKot

+0

請發佈「SHOW ERRORS」和「SHOW ENGINE INNODB STATUS」的輸出。 autoincrement是合法的(雖然它確實很奇怪)。問題是在創建fk_msg_messages_msg_messages_users約束時(如果將其刪除,它將創建表) – Leo

+0

140215 17:56:57表beta/msg_messages的外鍵約束出錯:FOREIGN KEY('id_msg') REFERENCES'beta' .'msg_messages_users'('id_msg') ON DELETE CASCADE ON UPDATE CASCADE) ENGINE = InnoDB的: 不能在表中找到所引用的表中的索引,其中 引用列顯示爲所述第一列或列類型 並且所引用的表格與約束不匹配。 – Julioarhernandez

回答

0

我是個啞巴...我宣佈錯了表的外鍵..

CREATE TABLE IF NOT EXISTS `beta`.`msg_messages` (
    `id_msg` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT , 
    `id_user_from` BIGINT(20) UNSIGNED NOT NULL , 
    `subject` VARCHAR(200) NOT NULL , 
    `body` TEXT NOT NULL , 
    `date` DATETIME NOT NULL , 
    PRIMARY KEY (`id_msg`) , 
    INDEX fk_msg_messages_user (`id_user_from` ASC) , 
    CONSTRAINT `fk_msg_messages_user` 
    FOREIGN KEY (`id_user_from`) 
    REFERENCES `beta`.`user` (`id`) 
    ON DELETE CASCADE 
    ON UPDATE CASCADE) 
ENGINE = InnoDB; 

CREATE TABLE IF NOT EXISTS `beta`.`msg_messages_users` (
    `id_msg` BIGINT(20) UNSIGNED NOT NULL , 
    `id_usr_to` BIGINT(20) UNSIGNED NOT NULL , 
    `status` TINYINT NOT NULL DEFAULT 0 , 
    `date` DATETIME NOT NULL , 
    INDEX id_msg (`id_msg` ASC) , 
    INDEX fk_msg_messages_users_msg_messages (`id_msg` ASC) , 
    INDEX fk_msg_messages_users_user (`id_usr_to` ASC) , 
    CONSTRAINT `fk_msg_messages_users_msg_messages` 
    FOREIGN KEY (`id_msg`) 
    REFERENCES `beta`.`msg_messages` (`id_msg`) 
    ON DELETE CASCADE 
    ON UPDATE CASCADE, 
    CONSTRAINT `fk_msg_messages_users_user` 
    FOREIGN KEY (`id_usr_to`) 
    REFERENCES `beta`.`user` (`id`) 
    ON DELETE CASCADE 
    ON UPDATE CASCADE) 
ENGINE = InnoDB; 

感謝所有