我有可指定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