2015-05-15 54 views
0
CREATE TABLE item(id int, number1 float, number2 float, number3 float, number 4 float, PRIMARY KEY(id), 
CONSTRAINT valid_numbers CHECK(
(number1 BETWEEN -1 and 1) AND 
(number2 BETWEEN -1 and 1) AND 
(number3 BETWEEN -1 and 1) AND 
(number4 BETWEEN -1 and 1) 
)); 

列號number1,number2,number3和number4都是相似的,因爲它們是需要介於-1和1之間的浮點數;然而他們的價值觀是不同的。檢查BETWEEN的多個列的約束條件

我該如何簡單地表達這種說法?例如,如果一直到15號。我不想說「BETWEEN -1 and 1」15次,我只想說一次。

+0

,MySQL的支持是外鍵的唯一限制。 – Barmar

+0

MySQL還強制執行'不NULL'約束和一些固有的「約束」爲每個數據類型(INT,DATE,ENUM等) – spencer7593

+0

我的意思,它遵循的唯一'CONSTRAINT'條款。 – Barmar

回答

0

真的沒有辦法「簡化」這一點。

我們可以用它避免了重複BETWEEN -1 AND 1多次表達,但它確實是沒有任何簡單。

例如:

GREATEST(ABS(IFNULL(number1,0)) 
     ,ABS(IFNULL(number2,0)) 
     ,ABS(IFNULL(number3,0)) 
     ,ABS(IFNULL(number4,0)) 
     ) <= 1 

如果任何在number1通過number4值都小於-1或大於1,則表達式將返回FALSE。


但是,MySQL不強制約束CHECK。如果您希望實際強制實施這種類型的約束,則需要將該邏輯放入BEFORE INSERTBEFORE UPDATE觸發器中。

CHECK子句分析,但是忽略所有的存儲引擎

參考:http://dev.mysql.com/doc/refman/5.6/en/create-table.html