我是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次。
guest
card_number
没有断言我该如何管理呢?
谢谢。
绝对会在“来宾”表上散发出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)上测试并为我工作