所以我有一个预订系统,我有一个'lesson_type'表,其中'lesson_type_id'为PK。我在这里有一个约束,所以如果有针对该lesson_type的预订,我就无法删除一个lesson_type。
我希望能够确定预订表(或任何其他表格)中的任何条目是否引用此lesson_type_id,以便我可以优雅地通知用户。即,当他们尝试删除记录时,不会抛出mysql错误。
我会使用什么样的查询?
感谢。
答案 0 :(得分:1)
SELECT COUNT(*) FROM bookings WHERE lesson_type_id = ?your_id LIMIT 1
如果没有引用,则结果为0;如果有引用,则结果为1。对任何其他表重复此操作。
另一种方法是只运行查询,捕获错误,检查其类型并显示通知,如果它是约束错误。这样做的方法取决于您使用什么来访问MySQL。
答案 1 :(得分:0)
delete bookings from
FROM bookings inner join
(
select lesson_type_id, count(*) as c
from bookings group by lesson_type_id
) bookings_count
on bookings.lesson_type_id = bookings_count.lesson_type_id
WHERE bookings.lesson_type_id = ? and bookings_count.c > 0
这样你可以一步完成删除和检查。然后,您可以选择之后直接删除的记录(或使用生成的rowcount())通知用户删除是否成功。