sql - 如何解决必须具有唯一名称的外键约束?

标签 sql mysql foreign-keys

我不确定为什么这些必须是唯一的,但从阅读 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/

相关文章:

mysql 在 where 子句中使用 DateTime

SQL Does "REFERENCE"自动生成 "FOREIGN KEY"

sql - 从多个表中选择计数

mysql - Codeigniter 设置多个 where 条件,如何取消设置

mysql - 尝试一次插入多个值时出现错误。这是为什么?

mysql - 如何显示MySQL中另一个表中具有多个值的列的值

sql - 如何正确索引数据库以提高查询性能

mysql - SQL 中的表是否可以有多个列作为外键,这些列仅引用另一个表的一个主键?

sql - 如何在一次表扫描中组合不同时间范围的多个查询

python - 我正在为年度 session 事件制作一个由 SQL 支持的网站。我应该如何构建对象之间的边缘?