2015-03-31 65 views
0

您好我有3个属性作为主键 产品的表: PRIMARY KEY(product_namecategoryproduct_type)。MySQL的复合外键引用超过2个属性

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

ORDER_DETAILS: 外键(PRODUCT_NAME,产品类型,类别)引用的产品(PRODUCT_NAME,产品类型,类别)

但是我得到一个错误在控制台说遗漏括号,我无法添加外键。但是,如果我只在参考中添加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) 

); 

回答

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) 

); 
+0

我试过了。但仍然无法正常工作:( – user2552729 2015-04-04 07:11:07

+0

@ user2552729仔细检查,确实有效,这是[小提琴](http://sqlfiddle.com/#!9/2ea3c)。 – saaj 2015-04-06 09:38:32