performance_id
、ticket_rank_id
およびに一意のインデックスを持つ InnoDB テーブルがありticket_type_id
ます。
これらの ID はすべて他のテーブルと関係がありますが、それらの値はNULL
. 列の値の 1 つが NULL の場合、MySQL では行の重複が許可されるため、trigger
この問題に対して を作成することにしました。
CREATE TRIGGER `before_insert_performance_tickets`
BEFORE INSERT ON `performance_tickets` FOR EACH ROW BEGIN
DECLARE num_rows INTEGER;
SELECT COUNT(*) INTO num_rows FROM performance_tickets
WHERE performance_id = NEW.performance_id
AND ticket_rank_id = NEW.ticket_rank_id
AND ticket_type_id = NEW.ticket_type_id;
IF num_rows > 0 THEN
// Cancel insert action
ELSE
// Perform insert action
END IF;
END
問題は、 NULL か値があるかAND ticket_rank_id = NEW.ticket_rank_id
を確認する必要があるところです。ticket_rank_id
AND ticket_rank_id = NULL
動作しません。動作する場合にのみ動作しますAND ticket_rank_id IS NULL
。
これに対する巧妙な解決策はありますか、または NULL であるかどうかに応じて個別のクエリを作成する必要がNEW.ticket_rank_id
ありますか?NEW.ticket_type_id