Mysql
 sql >> Base de données >  >> RDS >> Mysql

Contrainte de type assertion MySQL

Cela sent définitivement un trigger BEFORE INSERT sur la table 'guest' :

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 ;

Cela recherche essentiellement le nombre d'invités actuel et, s'il est déjà> =2, définit card_number sur NULL. Étant donné que card_number est déclaré NOT NULL, cela rejettera l'insertion.

Testé et fonctionne pour moi sur MySQL 5.1.41-3ubuntu12.10 (Ubuntu Lucid)