当前位置: 首页 > 知识库问答 >
问题:

引用2个以上属性的mysql复合外键

连时铭
2023-03-14

我有一个表,其中有3个属性作为主键产品:primary key(PRODUCT_NAMECategoryPRODUCT_TYPE)。

现在我在另一个表中引用这个复合主键

order_details:外键(product_name,product_type,category)引用产品(product_name,product_type,category)

然而,我在控制台中得到一个错误,说缺少括号,我无法添加外键。但是,如果只在引用中添加两个列名(例如:“FOREIGN key(product_name,product_type,category)references product_name,product_type)”),查询不会给出错误。

请帮我解决这个问题。请在下面找到我的代码

CREATE TABLE `products` (
  `product_name` varchar(45) NOT NULL,
  `product_type` varchar(45) NOT NULL,
  `category` varchar(45) NOT NULL,
  `product_desc` varchar(150) DEFAULT NULL,  
  `unit_price` int(11) NOT NULL,
  `supplier_id` int(11) NOT NULL,
  `units_in_stock` int(11) NOT NULL,
  PRIMARY KEY (`product_name`,`category`,`product_type`),
  INDEX (product_name,category,product_type),
  CONSTRAINT `supplier_prod_table_fkey` FOREIGN KEY (`supplier_id`) REFERENCES 
  `supplier` (`supplier_id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=INNODB;

CREATE TABLE `order_details` (
  `order_id` int(11) NOT NULL AUTO_INCREMENT,
  `product_name` varchar(45) NOT NULL,
  `product_type` varchar(45) NOT NULL,
  `category` varchar(45) NOT NULL,
  `quantity` int(11) DEFAULT NULL,
  CONSTRAINT `orderid_fkey` FOREIGN KEY (`order_id`) REFERENCES `orders`
  (`order_id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  PRIMARY KEY (`order_id`,`product_name`,`product_type`,`category`),
  INDEX (product_name,product_type,category),
  foreign key(product_name,product_type,category) references products(product_name,product_type,category)

);

共有1个答案

楮景明
2023-03-14

引用和对应索引中的字段在这两个表中必须按照相同的顺序排列,即(product_name,category,product_type)

CREATE TABLE `order_details` (
  `order_id` int(11) NOT NULL AUTO_INCREMENT,
  `product_name` varchar(45) NOT NULL,
  `product_type` varchar(45) NOT NULL,
  `category` varchar(45) NOT NULL,
  `quantity` int(11) DEFAULT NULL,
  CONSTRAINT `orderid_fkey` FOREIGN KEY (`order_id`) REFERENCES `orders`
  (`order_id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  PRIMARY KEY (`order_id`,`product_name`,`product_type`,`category`),
  INDEX (product_name,category,product_type),
  FOREIGN KEY(product_name,category,product_type) REFERENCES products(product_name,category,product_type)

);
 类似资料:
  • 很简单地说,我有 假设我每个有3000个 创建新的

  • 问题内容: 我有一个看起来像这样的复合组件: 我希望能够添加一个可选的“侦听器”属性,如果定义了该属性,则会将事件侦听器添加到我的f:ajax中,但是我在弄清楚如何完成此操作时遇到了麻烦。任何帮助,将不胜感激。 问题答案: 您需要指定标签的属性,以便将属性值视为方法表达式。您可以使用JSTL视图构建时间标记来有条件地添加标记。 (因为EL不能正常工作,所以会将属性作为值表达式隐式评估) 然后,您可

  • 我有以下MySQL表。这里的思想是轨道和课程是主键。并且轨道中的一个航向可能依赖于“同一轨道”中的另一个航向,因此我在(,)上创建了一个复合FK 但我在“depends_on_course_id column”中得到的结果都是空的,我猜getTrackCourse方法的映射有问题,但我不知道是什么?非常感谢任何帮助。

  • 我创建了一个带有主键(UsersID、AccountsID)的帐户/用户表,如下所示。我是否应该为Users表添加索引?

  • 问题 如果我像下面的例子一样使用属性访问类型,我是否也必须为引用的FK定义getter和setter? 我不认为是这样,但Java EE6的官方文档是这样做的。 null

  • 当目标实体使用复合连接时,其中一列是使用转换器的自定义类型,Hibernate(使用Spring Boot JPA)无法插入。 简化实体定义: converter类使用简单的字符串操作,TableId类实现可序列化。从Spring Boot应用程序的上下文中保存元素时,出现以下异常: 我验证了将列更改为简单字符串可以解决问题。我还应该应用什么来使其与此连接查询一起工作吗?