MySQL断言式约束

时间:2012-01-12 17:33:28

标签: mysql sql assertions

我是MySQL的新手,我刚刚发现它不支持断言。

我得到了这张桌子:

   CREATE TABLE `guest` (
   `ssn` varchar(16) NOT NULL,
   `name` varchar(200) NOT NULL,
   `surname` varchar(200) NOT NULL,
   `card_number` int(11) NOT NULL,
   PRIMARY KEY (`ssn`),
   KEY `card_number` (`card_number`),
   CONSTRAINT `guest_ibfk_1` FOREIGN KEY (`card_number`) REFERENCES `member` (`card_number`) 
   ) 

我需要的是会员最多可邀请2位客人。 因此,在表guest中,我需要特定的card_number最多可以出现2次。

如何在没有断言的情况下管理它?

感谢。

1 个答案:

答案 0 :(得分:3)

这肯定会在桌面'guest'上发出BEFORE INSERT触发器的气味:

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被声明为NOT NULL,因此将拒绝插入。

在MySQL 5.1.41-3ubuntu12.10(Ubuntu Lucid)上测试并为我工作