关于SQL中的ASSERTION(某单位想举行一个小型的联谊会……)

某单位想举行一个小型的联谊会,关系male记录注册的男嘉宾的信息,关系female记录注册的女嘉宾的信息,建立一个断言,将来宾的人数限制在50人以内。
嘿嘿,网上找不到答案,自己写出来了,就贴上吧

create table Female(
name varchar(30),
department varchar(30));

create table Male(
name varchar(30),
department varchar(30));
insert into Male values('李明','科技部'),
('王亮','信息部')
insert into Female values('陈雪','外贸部'),('刘丽','能源部'),('张艳','农业部')

通过此操作创建两个表,并插入数据
关于SQL中的ASSERTION(某单位想举行一个小型的联谊会……)_第1张图片
在这里插入图片描述
通过(派生表查询+集合查询)实现两个表中元组数目之和的统计。

select count(*)
from Female
union
select count(*)
from Male)as COUNTSS(CO))

在这里插入图片描述

结果正确
然后再用上断言就可以啦。
试了几次都不行,然后才发现
关于SQL中的ASSERTION(某单位想举行一个小型的联谊会……)_第2张图片
服了,因为我电脑上只有MySQL,所以不知道整个代码是不是对的(应该是对的,我对照了好几次书)。
代码如下

create assertion asse_INC
check(50>=(select SUM(CO)
from(select count(*)
from Female
union
select count(*)
from Male)as COUNTSS(CO)));

断言机制行不通了,那么就可以试试触发器?
发现最普通的建立触发器也有问题

create trigger count_number
before insert on male
for each row begin
if((select count(*) as num from male)>50)then
set new.name = null;
end if;
end;

这段代码,也有问题
关于SQL中的ASSERTION(某单位想举行一个小型的联谊会……)_第3张图片
但是通过查找资料找不到问题源头。

如果大家测试出这个语句是对是错可以在底下评论;
如果大家有更好的解题方案也欢迎评论;
welcome

你可能感兴趣的:(MySQL)