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

时间:2015-03-31 04:23:03

标签: mysql database foreign-keys constraints

嗨我有一个包含3个属性作为主键的表 产品介绍: PRIMARY KEY(product_namecategoryproduct_type)。

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

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

但是我在控制台中收到错误的括号错误,我无法添加外键。但是,如果我在引用中只添加2个列名称(例如:"外键(product_name,product_type,category)引用产品(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 个答案:

答案 0 :(得分:0)

REFERENCES和通讯索引中的字段必须在两个表中按相同的顺序排列,即(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)

);