对于c,没有违反约束。 DELETE FROM B WHERE NOT EXISTS(SELECT * FROM C where idB = B.id) DELETE FROM A WHERE NOT EXISTS(SELECT * FROM B where idA = A.id) 通过这种方式,您可以在执行删除之前检查是否会违反外键。对于大型表,应该考虑添加索引。
SELECT Employees.ID, COUNT(Orders.OrderID) AS NumberOfOrders
FROM (Employees
LEFT JOIN Orders ON Orders.EmployeeID = Employees.EmployeeID)
GROUP BY Employees.ID
HAVING COUNT(Orders.OrderID) = 0;
3条答案
按热度按时间wvmv3b1j1#
对于c,没有违反约束。
DELETE FROM B WHERE NOT EXISTS(SELECT * FROM C where idB = B.id)
DELETE FROM A WHERE NOT EXISTS(SELECT * FROM B where idA = A.id)
通过这种方式,您可以在执行删除之前检查是否会违反外键。对于大型表,应该考虑添加索引。h7wcgrx32#
我通常避免使用它们,因为它们在过度使用时可能会导致性能噩梦,但这听起来像是触发器的确切用例,假设您总是希望这样的情况发生。
触发器是自动响应数据库中的其他更改而执行的,因此当您执行其他操作(如从b或c中删除一行)时,触发器将隐式地为您处理。
下面是另一篇文章中的一个示例:phpmyadmin创建一个触发器,用于在不存在子行时删除父行。
可以有一个触发器处理b-c父关系,另一个处理a-b关系。我相信他们应该很好。
toe950273#
我想你在找这样的东西
其中雇员=a,订单=b