中间表上的CREATE TABLE问题

时间:2011-10-27 12:13:20

标签: mysql

遇到问题让它发挥作用。 MySQL不断抛出以下内容:

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ON DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (order_id) REFERENCES order' at line 6

SQL是:

DROP TABLE IF EXISTS `user_orders`;
CREATE TABLE `user_orders` (
`user_orders_user_id` int(10) unsigned NOT NULL default '0',
`user_orders_order_id` int(10) unsigned NOT NULL default '0',
PRIMARY KEY (`user_orders_user_id`, `user_orders_order_id`),
FOREIGN KEY (user_id) REFERENCES user(id),
    ON DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (order_id) REFERENCES order(id)
    ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB;

user_orders充当User.idOrder.id的中间表(即保存用户每个订单的记录)。我觉得我错过了一些明显的东西。 User表没有FK,Order表的FK(user_id)到User.idON DELETE CASCADE ON UPDATE CASCADE)。

希望我只是累了,这是一个小问题......

2 个答案:

答案 0 :(得分:3)

你有一个逗号不应该在这一行:

FOREIGN KEY (user_id) REFERENCES user(id),

此外,在您的表格中,您没有user_idorder_id等字段。事实上,您有user_orders_user_iduser_orders_order_id

此外,您必须在order之间加入',因为这是ypercube建议的保留字。

答案 1 :(得分:2)

不要对保留关键字的字段和表使用名称,例如order。如果必须,请使用`order`转义:

FOREIGN KEY (order_id) REFERENCES `order`(id)