类似于MySQL断言的约束
作者:互联网
我是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”上发出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)上测试并为我工作
标签:assertions,sql,mysql 来源: https://codeday.me/bug/20191201/2084096.html