我有这张桌子:
订单: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功能来相应地修改其他表。
因此,我将仅使用顺序删除。