第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

如何在MySQL表上添加自定義CHECK約束?

如何在MySQL表上添加自定義CHECK約束?

我在這張桌子上遇到麻煩CREATE TABLE `Participants` (  `meetid` int(11) NOT NULL,  `pid` varchar(15) NOT NULL,  `status` char(1) DEFAULT NULL,  PRIMARY KEY (`meetid`,`pid`),  CONSTRAINT `participants_ibfk_1` FOREIGN KEY (`meetid`) REFERENCES `Meetings` (`meetid`) ON DELETE CASCADE  CONSTRAINT `participants_ibfk_2` CHECK (status IN ('a','d','u'))  CONSTRAINT `participants_ibfk_3` CHECK (pid IN (SELECT name FROM Rooms) OR pid IN (SELECT userid FROM People)));我想要一個(gè)外鍵約束,并且可以。然后,我還想向該屬性添加一個(gè)約束,status以便它只能采用值“ a”,“ d”和“ u”。我無(wú)法將字段設(shè)置為Enum或set。誰(shuí)能告訴我為什么這段代碼在MySQL中不起作用?
查看完整描述

3 回答

?
子衿沉夜

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超3個(gè)贊

CHECKMySQL不支持約束。您可以定義它們,但是它們什么也不做(從MySQL 5.7開(kāi)始)。


從手冊(cè):


該CHECK子句已解析,但被所有存儲(chǔ)引擎忽略。


解決方法是創(chuàng)建觸發(fā)器,但并不是最容易使用的觸發(fā)器。


如果要使用支持CHECK約束的開(kāi)源RDBMS ,請(qǐng)嘗試PostgreSQL。它實(shí)際上是一個(gè)非常好的數(shù)據(jù)庫(kù)。


查看完整回答
反對(duì) 回復(fù) 2019-12-27
?
達(dá)令說(shuō)

TA貢獻(xiàn)1821條經(jīng)驗(yàn) 獲得超6個(gè)贊

正如我在本文中所解釋的,從8.0.16版本開(kāi)始,MySQL添加了對(duì)CHECK約束的支持:


ALTER TABLE topic

ADD CONSTRAINT post_content_check

CHECK (

    CASE

        WHEN DTYPE = 'Post'

        THEN

            CASE

                WHEN content IS NOT NULL

                THEN 1

                ELSE 0

            END

        ELSE 1

    END = 1

);


ALTER TABLE topic

ADD CONSTRAINT announcement_validUntil_check

CHECK (

    CASE

        WHEN DTYPE = 'Announcement'

        THEN

            CASE

                WHEN validUntil IS NOT NULL

                THEN 1

                ELSE 0

            END

        ELSE 1

    END = 1

);

以前,僅在使用BEFORE INSERT和BEFORE UPDATE觸發(fā)器時(shí)才可用:


CREATE

TRIGGER post_content_check BEFORE INSERT

ON topic

FOR EACH ROW

BEGIN

   IF NEW.DTYPE = 'Post'

   THEN

       IF NEW.content IS NULL

       THEN

           signal sqlstate '45000'

           set message_text = 'Post content cannot be NULL';

       END IF;

   END IF;

END;


CREATE

TRIGGER post_content_update_check BEFORE UPDATE

ON topic

FOR EACH ROW

BEGIN

   IF NEW.DTYPE = 'Post'

   THEN

       IF NEW.content IS NULL

       THEN

           signal sqlstate '45000'

           set message_text = 'Post content cannot be NULL';

       END IF;

   END IF;

END;


CREATE

TRIGGER announcement_validUntil_check BEFORE INSERT

ON topic

FOR EACH ROW

BEGIN

   IF NEW.DTYPE = 'Announcement'

   THEN

       IF NEW.validUntil IS NULL

       THEN

           signal sqlstate '45000'

           set message_text = 'Announcement validUntil cannot be NULL';

       END IF;

   END IF;

END;


CREATE

TRIGGER announcement_validUntil_update_check BEFORE UPDATE

ON topic

FOR EACH ROW

BEGIN

   IF NEW.DTYPE = 'Announcement'

   THEN

       IF NEW.validUntil IS NULL

       THEN

           signal sqlstate '45000'

           set message_text = 'Announcement validUntil cannot be NULL';

       END IF;

   END IF;

END;

有關(guān)使用8.0.16之前的MySQL版本的數(shù)據(jù)庫(kù)觸發(fā)器模擬CHECK約束的更多詳細(xì)信息,請(qǐng)參閱本文。


查看完整回答
反對(duì) 回復(fù) 2019-12-27
  • 3 回答
  • 0 關(guān)注
  • 1952 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)