2017-09-29 74 views
0

任何人都可以帮助我正确地编写CHECK CONSTRAINT IN MYSQL的正确语法。我的表如下所示,并且在声明STATUS的CHECK约束时出错。检查mysql的约束条件

CREATE TABLE EventRequest (
EventNo CHAR(8) NOT NULL, 
DateHeld DATE NOT NULL, 
DateReq DATE NOT NULL, 
FacNo CHAR(8)NOT NULL, 
CustNo CHAR(8) NOT NULL, 
DateAuth DATE, 
Status CHAR(8)NOT NULL, 
EstCost DECIMAL(9,4)NOT NULL, 
EstAudience INT(6) NOT NULL, 
BudNo VARCHAR2(8), 
CONSTRAINT PK_EVENTREQUEST PRIMARY KEY (EventNo), 
CONSTRAINT FK_FACNO FOREIGN KEY (FacNo) REFERENCES FACILITY (FacNo), 
CONSTRAINT FK_CUSTNO FOREIGN KEY (CustNo) REFERENCES CUSTOMER (CustNo), 
CONSTRAINT Check_Status 
CHECK (Status IN ('Approved','Pending','Denied'))) ; 
+0

代码工作'VARCHAR2'看起来怪怪的? –

+0

我认为'CHECK CONSTRAINT','VARCHAR2'只支持'Oracle',不支持'Mysql'。 –

回答

1

MySQL不支持CHECK约束。

这是多年来的心愿单项(https://bugs.mysql.com/bug.php?id=3464)。

MySQL的团队已经发布了关于解决办法博客:http://mysqlserverteam.com/new-and-old-ways-to-emulate-check-constraints-domain/

你的情况,你可以考虑:

CONSTRAINT Check_Status FOREIGN KEY (Status) REFERENCES StatusTypes (Status) 

,然后创建一个表StatusTypes与要限制它的三排。

+0

值得注意的是,虽然MySQL没有检查限制,但从版本10.2开始[MariaDB确实拥有它们](https://mariadb.com/kb/en/library/constraint/#check-constraints)。 – dbdemon

0

谢谢所有那些谁试图帮助,终于成功地使其与下面

CREATE TABLE EventRequest (
    EventNo VARCHAR(8) NOT NULL COMMENT 'Event number', 
    DateHeld DATE NOT NULL COMMENT 'Event date', 
    DateReq DATE NOT NULL COMMENT 'Date requested', 
    CustNo VARCHAR(8) NOT NULL COMMENT 'Customer number', 
    FacNo VARCHAR(8) NOT NULL COMMENT 'Facility number', 
    DateAuth DATE COMMENT 'Date authorized', 
    Status VARCHAR(20) NOT NULL COMMENT 'Status of event request' CHECK 
    (Status IN ('Pending', 'Denied', 'Approved')), 
    EstCost DECIMAL(15,4) NOT NULL COMMENT 'Estimated cost', 
    EstAudience DECIMAL(11,0) NOT NULL COMMENT 'Estimated audience' CHECK 
    (EstAudience > 0), 
    BudNo VARCHAR(8) COMMENT 'Budget number', 
    CONSTRAINT PK_EVENTREQUEST PRIMARY KEY (EventNo), 
    CONSTRAINT FK_EVENT_FACNO FOREIGN KEY (FacNo) REFERENCES FACILITY (FacNo), 
    CONSTRAINT FK_CUSTNO FOREIGN KEY (CustNo) REFERENCES CUSTOMER (CustNo));