Mysql Connot添加外键约束。我怎么解决呢?

时间:2017-12-15 13:13:40

标签: mysql database

我试图执行查询。但是发生了错误。错误消息为'Cannot add foreign key constraint'。 我应该创建这个表。但它不起作用。

    CREATE TABLE IF NOT EXISTS `mydb`.`member` (
      `idseq` INT(1) NOT NULL AUTO_INCREMENT,
      `id` VARCHAR(50) NOT NULL,
      `pw` VARCHAR(20) NOT NULL,
      `name` VARCHAR(50) NOT NULL,
      `email` VARCHAR(45) NOT NULL,
      `mobile0` VARCHAR(3) NOT NULL,
      `mobile1` VARCHAR(3) NOT NULL,
      `mobile2` VARCHAR(4) NOT NULL,
      `mobile3` VARCHAR(4) NOT NULL,
      `birth` DATE NOT NULL,
      `admin_YN` VARCHAR(45) NOT NULL DEFAULT 'N',
      `reg_date` DATE NOT NULL,
      `upd_date` DATE NOT NULL,
      PRIMARY KEY (`idseq`, `id`))
    ENGINE = InnoDB
    AUTO_INCREMENT = 6
    DEFAULT CHARACTER SET = utf8;


CREATE TABLE IF NOT EXISTS `mydb`.`reservation` (
  `reservation_seq` INT(11) NOT NULL AUTO_INCREMENT,
  `user_id` VARCHAR(50) NOT NULL,
  `playMv_seq` INT(11) NOT NULL,
  `reservaion_seat_code` VARCHAR(20) NOT NULL,
  `reservaion_seat_num` INT(11) NOT NULL,
  `reservation_charge` VARCHAR(20) NOT NULL,
  `reservation_date` DATETIME NOT NULL,
  PRIMARY KEY (`reservation_seq`, `user_id`, `playMv_seq`),

    FOREIGN KEY (`user_id`)
    REFERENCES `mydb`.`member` (`id`)    
    )
ENGINE = InnoDB
AUTO_INCREMENT = 8
DEFAULT CHARACTER SET = utf8;

所以我从查询'show engine innodb status检查了详细信息。详细错误消息是

表mydb / reservation的外键约束出错:


 FOREIGN KEY (`user_id`)
     REFERENCES `mydb`.`member` (`id`)


在引用的表中找不到索引  引用的列显示为第一列或列类型  在表中,引用的表与约束不匹配。  请注意,ENUM和SET的内部存储类型已更改  使用> = InnoDB-4.1.12创建的表,以及旧表中的此类列  新表中的这些列不能引用它。

如何解决错误

1 个答案:

答案 0 :(得分:0)

您正在尝试创建引用目标表的id列的外键:

FOREIGN KEY (`user_id`)
REFERENCES `mydb`.`member` (`id`)

但是目标表上的实际键是什么?:

PRIMARY KEY (`idseq`, `id`)

如果id idseq的合成,则不是id。为了将其作为外键引用,您需要与以下列匹配的本地列:

`user_idseq` INT(1) NOT NULL,
`user_id` VARCHAR(50) NOT NULL,

并使用两者作为外键:

FOREIGN KEY (`user_idseq`, `user_id`)
REFERENCES `mydb`.`member` (`idseq`, `id`)

(旁注:member中的主键一开始看起来很奇怪。为什么idseq本身可以成为主键?{目的是什么? {1}}?)