我试图执行查询。但是发生了错误。错误消息为'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创建的表,以及旧表中的此类列 新表中的这些列不能引用它。
如何解决错误
答案 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}}?)