0

したがって、PK として「lesson_type_id」を持つ「lesson_type」テーブルがある予約システムがあります。ここで制約を設定しているため、そのlesson_typeの予約がある場合、lesson_typeを削除できません。

ユーザーに適切に通知できるように、このlesson_type_idが予約テーブル(またはその他のテーブル)のエントリによって参照されているかどうかを判断できるようにしたいと考えています。つまり、レコードを削除しようとしたときに mysql エラーがスローされません。

これにはどのようなクエリを使用しますか?

ありがとう。

4

2 に答える 2

1
SELECT COUNT(*) FROM bookings WHERE lesson_type_id = ?your_id LIMIT 1

参照がない場合、結果は 0 になり、参照がある場合は 1 になります。他のテーブルについてもこれを繰り返します。

もう 1 つの方法は、クエリを実行してエラーをキャッチし、そのタイプをチェックして、制約エラーの場合は通知を表示することです。これを行う方法は、MySQL へのアクセスに何を使用しているかによって異なります。

于 2010-04-04T15:49:35.447 に答える
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

そうすれば、削除とチェックを 1 つのステップで実行できます。その後、削除するレコードを直接選択して (または結果の rowcount() を使用して)、削除が成功したかどうかをユーザーに通知できます。

于 2010-04-04T16:30:33.707 に答える