所以我有一个预订系统,其中有一个 'lesson_type' 表,其中 'lesson_type_id' 作为 PK。我在这里有一个约束,所以如果有针对该课程类型的预订,我无法删除该课程类型。
我希望能够确定 bookings 表(或任何其他表)中的任何条目是否引用了这个 course_type_id,以便我可以优雅地通知用户。即当他们尝试删除记录时不会引发 mysql 错误。
我会为此使用什么样的查询?
谢谢。
所以我有一个预订系统,其中有一个 'lesson_type' 表,其中 'lesson_type_id' 作为 PK。我在这里有一个约束,所以如果有针对该课程类型的预订,我无法删除该课程类型。
我希望能够确定 bookings 表(或任何其他表)中的任何条目是否引用了这个 course_type_id,以便我可以优雅地通知用户。即当他们尝试删除记录时不会引发 mysql 错误。
我会为此使用什么样的查询?
谢谢。
SELECT COUNT(*) FROM bookings WHERE lesson_type_id = ?your_id LIMIT 1
如果没有引用,则结果为 0,如果有一些,则结果为 1。对任何其他表重复此操作。
另一种方法是只运行查询、捕获错误、检查其类型并在出现约束错误时显示通知。执行此操作的方法取决于您使用什么来访问 MySQL。
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())来通知用户删除是否成功。