Kor*_*rts 10 mysql foreign-keys foreign-key-relationship
我似乎在设置Foreign Key两个表之间时遇到了麻烦.
以下是CREATE每个表的子句:
CREATE TABLE IF NOT EXISTS `dbname`.`CallRecord` (
`id` INT NOT NULL AUTO_INCREMENT,
`user_id` INT NOT NULL,
`city_id` INT NOT NULL,
`created` DATETIME NULL,
`timestamp` TIMESTAMP NULL,
PRIMARY KEY (`id`),
INDEX `user_id_fk_idx` (`user_id` ASC),
INDEX `city_id_fk_idx` (`city_id` ASC),
CONSTRAINT `user_id_fk`
FOREIGN KEY (`user_id`)
REFERENCES `dbname`.`User` (`id`)
ON DELETE RESTRICT
ON UPDATE NO ACTION,
CONSTRAINT `city_id_fk`
FOREIGN KEY (`city_id`)
REFERENCES `dbname`.`City` (`id`)
ON DELETE RESTRICT
ON UPDATE NO ACTION)
ENGINE = InnoDB;
Run Code Online (Sandbox Code Playgroud)
这是另一张桌子:
CREATE TABLE IF NOT EXISTS `dbname`.`DataCallAssoc` (
`id` INT NOT NULL AUTO_INCREMENT,
`data_id` INT NOT NULL,
`call_record_id` INT NOT NULL,
PRIMARY KEY (`id`),
INDEX `data_id_fk_idx` (`data_id` ASC),
INDEX `call_record_id_fk_idx` (`call_record_id` ASC),
CONSTRAINT `data_id_fk`
FOREIGN KEY (`data_id`)
REFERENCES `dbname`.`Data` (`id`)
ON DELETE CASCADE
ON UPDATE NO ACTION,
CONSTRAINT `call_record_id_fk`
FOREIGN KEY (`call_record_id`)
REFERENCES `dbname`.`CallRecord` (`id`)
ON DELETE CASCADE
ON UPDATE NO ACTION)
ENGINE = InnoDB;
Run Code Online (Sandbox Code Playgroud)
问题在于最后CONSTRAINT一个DataCallAssoc:
CONSTRAINT `call_record_id_fk`
FOREIGN KEY (`call_record_id`)
REFERENCES `dbname`.`CallRecord` (`id`)
ON DELETE CASCADE
ON UPDATE NO ACTION)
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
Error creating foreign key on call_record_id (check data types)
即使我单独创建表和外键.每个其他外键都可以工作,甚至其他指向CallRecord.id外键的表也可以工作.
我还检查了结构方面CallRecord.id的相同DataCallAssoc.call_record_id.
ade*_*mup 37
如果您已在另一个表中具有相同名称的外键,则会出现创建外键错误...(检查数据类型)错误.因此,如果您遇到这个最无用的错误消息,请确保您的数据类型匹配,并且外键名称是唯一的.希望这有助于某人.
我能够在我的本地主机中重新创建您的表,我从第一个删除了它create,因为您没有显示USER或City表的结构,所以错误应该在那里
CONSTRAINT `user_id_fk`
FOREIGN KEY (`user_id`)
REFERENCES `dbname`.`User` (`id`)
ON DELETE RESTRICT
ON UPDATE NO ACTION,
CONSTRAINT `city_id_fk`
FOREIGN KEY (`city_id`)
REFERENCES `dbname`.`City` (`id`)
ON DELETE RESTRICT
ON UPDATE NO ACTION)
Run Code Online (Sandbox Code Playgroud)
这就是我使用的原因。
CREATE TABLE IF NOT EXISTS `CallRecord` (
`id` INT NOT NULL AUTO_INCREMENT,
`user_id` INT NOT NULL,
`city_id` INT NOT NULL,
`created` DATETIME NULL,
`timestamp` TIMESTAMP NULL,
PRIMARY KEY (`id`),
INDEX `user_id_fk_idx` (`user_id` ASC),
INDEX `city_id_fk_idx` (`city_id` ASC)
)
ENGINE = InnoDB
CREATE TABLE IF NOT EXISTS `DataCallAssoc` (
`id` INT NOT NULL AUTO_INCREMENT,
`data_id` INT NOT NULL,
`call_record_id` INT NOT NULL,
PRIMARY KEY (`id`),
INDEX `data_id_fk_idx` (`data_id` ASC),
INDEX `call_record_id_fk_idx` (`call_record_id` ASC),
CONSTRAINT `call_record_id_fk`
FOREIGN KEY (`call_record_id`)
REFERENCES `CallRecord` (`id`)
ON DELETE CASCADE
ON UPDATE NO ACTION)
ENGINE = InnoDB
Run Code Online (Sandbox Code Playgroud)
