我有这张桌子:


订单:OrderId,UserId
OrderItems:OrderId,价格


OrderItems.OrderId上有外键,有可能没有订单项的订单。我想删除某些用户的所有订单和订单Ietm。具有内部联接的此sql可以正常工作:

DELETE o, oi
FROM Orders o
JOIN OrderItems oi ON o.OrderId = oi.OrderId
WHERE o.UserId = 11


但它不会删除没有订单项的订单(内部联接)。但是带有左联接的SQL查询

DELETE o, oi
FROM Orders o
LEFT JOIN OrderItems oi ON o.OrderId = oi.OrderId
WHERE o.UserId = 11


引发错误


  无法更新或删除父行。


怎么了?是否可以在一个查询中删除用户的所有订单(带项目和不带项目)?

最佳答案

Here解释为


  如果您使用涉及具有外键约束的InnoDB表的多表DELETE语句,则MySQL优化器可能以与其父/子关系不同的顺序处理表。在这种情况下,该语句将失败并回滚。相反,您应该从单个表中删除,并依靠InnoDB提供的ON DELETE功能来相应地修改其他表。


因此,我将仅使用顺序删除。

10-08 20:20