嗨我有一个包含3个属性作为主键的表
产品介绍:
PRIMARY KEY(product_name
,category
,product_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) );
答案 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)
);