我有可指定2表模式如下:完整性约束来表达“必须有一个主属性”
CREATE TABLE MEMBERS
(membershipnumber int NOT NULL PRIMARY KEY,
firstname varchar(20) NOT NULL,
lastname varchar(20) NOT NULL,
email varchar(30) NOT NULL,
status varchar(15) NOT NULL DEFAULT 'unapproved',
);
CREATE TABLE TELEPHONENUMBERS
(telephone varchar(15) NOT NULL PRIMARY KEY,
membershipnumber INT NOT NULL REFERENCES MEMBERS(membershipnumber),
isprimary enum('0','1') NOT NULL DEFAULT '1'
);
我试图指定的完整性约束,以表明任何个人会员可能只有一个主要电话号码(即telephonenumbers.isprimary ='1')和任何数量的次要电话号码。
这里是我当前的尝试:
ALTER TABLE MEMBERS
ADD CONSTRAINT oneprimary_ck CHECK (SELECT COUNT(isprimary)=1 FROM TELEPHONENUMBERS WHERE TELEPHONENUMBERS.membershipnumber = membershipnumber) IN '1';
然而,这会产生以下语法错误:
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT COUNT(isprimary)=0 FROM TELEPHONENUMBERS WHERE TELEPHONENUMBERS.membershipnumber=1 IN '1') IN ''
我假设我的做法是完全错误的,但我不知道该如何继续。用触发器做这件事情会更好吗?或者我的方法能起作用吗?
我使用的是服务器版本:5.5.30。
非常感谢,
Froskoy。
我不认为MySQL支持这种约束... – fthiella