これは間違いなく、テーブル'guest'のBEFOREINSERTトリガーのにおいがします:
DELIMITER $$
DROP TRIGGER IF EXISTS check_guest_count $$
CREATE TRIGGER check_guest_count BEFORE INSERT ON `guest`
FOR EACH ROW BEGIN
DECLARE numguests int DEFAULT 0;
SELECT COUNT(*) INTO numguests FROM `guest` WHERE card_number=NEW.card_number;
if numguests>=2 THEN
SET NEW.card_number = NULL;
END IF;
END;
$$
DELIMITER ;
これは基本的に現在のゲスト数を検索し、すでに> =2の場合は、card_numberをNULLに設定します。 card_numberはNOTNULLとして宣言されているため、挿入は拒否されます。
MySQL 5.1.41-3ubuntu12.10(Ubuntu Lucid)でテストされ、動作します