2014-11-22 104 views
0

我在phpMyAdmin中使用MySQL創建表。我想使用CHECK約束來確保VATPERCENTAGE的新值介於0和100之間。當前語法不正確。我怎樣才能正確使用兩個CHECK,或者更好,我可以使用單個CHECK來查看它是否在兩個數字之間?在phpMyAdmin(MySQL)中對一個字段進行多重檢查

CREATE TABLE JOBSFORCLIENTS(
JOBID    NUMERIC(3) NOT NULL PRIMARY KEY, 
CLIENTID   NUMERIC(3) NOT NULL, 
VATPERCENTAGE  NUMERIC(3,2) NOT NULL CHECK (VATPERCENTAGE >= 0) AND CHECK (VATPERCENTAGE <= 100) 
); 

回答

1

不幸的是MySQL的仍然不支持 CHECK約束。

CREATE TABLE Syntax
的CHECK子句是解析但忽略通過所有存儲引擎。

這裏是一個SQLFiddle演示


現在你可以加強這個約束有一對觸發器雖然

CREATE TRIGGER VATPERCENTAGE_CHECK_INSERT 
BEFORE INSERT ON JOBSFORCLIENTS 
FOR EACH ROW 
    SET NEW.VATPERCENTAGE = IF(NEW.VATPERCENTAGE BETWEEN 0 AND 100, NEW.VATPERCENTAGE, NULL); 

CREATE TRIGGER VATPERCENTAGE_CHECK_UPDATE 
BEFORE UPDATE ON JOBSFORCLIENTS 
FOR EACH ROW 
    SET NEW.VATPERCENTAGE = IF(NEW.VATPERCENTAGE BETWEEN 0 AND 100, NEW.VATPERCENTAGE, NULL); 

想法很簡單 - 如果一個新值超出有效值的範圍我們簡單地違反NOT NULL約束VATPERCENTAGE列有效防止一行被插入和(或)更新。這種方法適用於5.5之前的MySQL。如果你想輸出一個合適的消息,你可以使用SIGNAL,如果你使用MySQL 5.5或更高版本。

這裏是一個SQLFiddle演示

-1

真的很簡單的修復其實。

CHECK (VATPERCENTAGE BETWEEN 0 AND 100) 
+0

爲了進一步讀者着想,這是一個**錯誤的答案**。 MySQL **忽略** CHECK約束。查看[sqlfiddle](http://sqlfiddle.com/#!9/47326/1)演示。 – peterm 2015-01-27 01:58:29

相關問題