【问题标题】:MySQL can't accept my tableMySQL 不能接受我的表
【发布时间】:2013-01-04 16:07:06
【问题描述】:

我使用 MySQL Workbench 为我的表建模,但不知何故,在创建软件生成的表的 SQL 中存在逻辑错误。

代码如下:

-- -----------------------------------------------------
-- Table `trickani_main`.`user`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `trickani_main`.`user` (
  `iduser` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
  `fb_id` VARCHAR(50) NOT NULL ,
  `email` VARCHAR(40) NOT NULL ,
  `first_name` VARCHAR(15) NOT NULL ,
  `gender` VARCHAR(1) NOT NULL ,
  PRIMARY KEY (`iduser`) ,
  UNIQUE INDEX `fb_id_UNIQUE` (`fb_id` ASC) ,
  UNIQUE INDEX `email_UNIQUE` (`email` ASC) )
ENGINE = InnoDB
AUTO_INCREMENT = 1;


-- -----------------------------------------------------
-- Table `trickani_main`.`quiz_list`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `trickani_main`.`quiz_list` (
  `id_quiz_list` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
  `difficult` TINYINT(4) NOT NULL ,
  PRIMARY KEY (`id_quiz_list`) )
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `trickani_main`.`user_quiz_list`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `trickani_main`.`user_quiz_list` (
  `iduser` INT UNSIGNED NOT NULL ,
  `id_quiz_list` INT UNSIGNED NOT NULL ,
  `level_reached` INT UNSIGNED NOT NULL DEFAULT 0 ,
  PRIMARY KEY (`iduser`, `id_quiz_list`) ,
  INDEX `fk_quiz_list_user1_idx` (`iduser` ASC) ,
  INDEX `fk_user_quiz_list_quiz_list1_idx` (`id_quiz_list` ASC) ,
  CONSTRAINT `fk_quiz_list_user1`
    FOREIGN KEY (`iduser` )
    REFERENCES `trickani_main`.`user` (`iduser` )
    ON DELETE CASCADE
    ON UPDATE CASCADE,
  CONSTRAINT `fk_user_quiz_list_quiz_list1`
    FOREIGN KEY (`id_quiz_list` )
    REFERENCES `trickani_main`.`quiz_list` (`id_quiz_list` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB
AUTO_INCREMENT = 1;

结果我收到以下消息:

#1005 - 无法创建表 'trickani_main.quiz_level' (errno: 150)

我不明白!即使阅读代码本身,我也看不到任何错误!

有什么帮助吗?

【问题讨论】:

  • 我认为您没有向我们展示quiz_level 创建代码...
  • 通常我会在 Workbench 抱怨它的外键问题时发现。如果禁用 FK 并运行它会通过吗?
  • 这是全部的代码吗?因为在您给我们的 SQL 中甚至没有引用表 quiz_level
  • 似乎在SQL Fiddle工作

标签: mysql sql create-table


【解决方案1】:

你的桌子似乎在这里工作

您在数据库和表之间进行混合。 只需使用您想要创建的表格即可。

sqlfiddle

【讨论】:

    【解决方案2】:

    您可能想尝试让您的 PK 不签名。

    查看此问题/答案:Adding table with FOREIGN KEY to a MySQL database causes errno 150

    编辑:您可能想尝试使所有 PK 签名或所有 PK 未签名。我的猜测是quiz_level 的定义(当前未在您的问题中显示)有一个签名与其他表不同的 PK。

    【讨论】:

    • 这不是您所引用问题的接受答案的意图。问题是FK关系中涉及的两个字段不相同,一个是SIGNED,另一个是UNSIGNED。通过将另一个字段更改为UNSIGNED,问题将得到解决。
    • 结果如何,OP?
    • 您最初是否尝试使用签名或未签名的 PK 创建 quiz_level
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-18
    • 1970-01-01
    • 2016-10-05
    • 1970-01-01
    • 1970-01-01
    • 2015-05-27
    相关资源
    最近更新 更多