我不确定为什么这些必须是唯一的,但从阅读 MySQL 论坛来看,它们似乎是唯一的。不过,我认为这与 INDEX 名称有更多关系。我有两个表,它们的外键约束引用第三个表上的相同主键。如果有帮助,我将使用 MySQL Workbench 来设计架构。
我通常在每个表上将外键命名为与其引用的主键相同的名称。我想这是不可能的。它将创建带有外键约束的第一个表,但是当它尝试创建第二个表时,它会抛出错误。这是引发错误的第二个表:
CREATE TABLE IF NOT EXISTS `joe`.`products_to_categories` (
`product_to_category_id` INT NOT NULL AUTO_INCREMENT ,
`category_id` INT NOT NULL ,
`product_id` INT NOT NULL ,
PRIMARY KEY (`product_to_category_id`) ,
INDEX `category_id` (`category_id` ASC) ,
INDEX `product_id` (`product_id` ASC) ,
CONSTRAINT `category_id`
FOREIGN KEY (`category_id` )
REFERENCES `joe`.`categories` (`category_id` )
ON DELETE CASCADE
ON UPDATE NO ACTION,
CONSTRAINT `product_id`
FOREIGN KEY (`product_id` )
REFERENCES `joe`.`products` (`product_id` )
ON DELETE CASCADE
ON UPDATE NO ACTION)
ENGINE = InnoDB;
我希望外键名称与其他两个表中的主键名称相同。我应该在这里删除什么以便我可以使用这些名称。这里的最佳实践是什么。
最佳答案
这是不可能的,因为用于索引 IIRC 的文件的文件名会发生冲突。我可能会将键命名为
关于sql - 如何解决必须具有唯一名称的外键约束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1114674/