mysql断言命令,类似于MySQL断言的约束

I'm a MySQL newbie, I just discovered that it doesn't support assertions.

I got this table:

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`)

)

What I need is that a member can invite maximum 2 guests.

So, in table guest I need that a specific card_number can appear maximum 2 times.

How can I manage it without assertions?

Thanks.

解决方案

This definitly smells of a BEFORE INSERT trigger on the 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 ;

This basically looks up the current guest count, and if it is already >=2 sets card_number to NULL. Since card_number is declared NOT NULL, this will reject the insert.

Tested and works for me on MySQL 5.1.41-3ubuntu12.10 (Ubuntu Lucid)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值