检查BETWEEN的多个列的约束

时间:2015-05-15 18:49:30

标签: mysql multiple-columns check-constraints

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之间的浮点数;但是他们的价值观是不同的。

我如何简单地说这句话?例如,如果它一直到第15位。我不想说“BETWEEN -1 and 1”15次,我只想说一次。

1 个答案:

答案 0 :(得分:0)

真的没办法"简化"此

我们可以使用避免多次重复BETWEEN -1 AND 1的表达式,但它实际上并不简单。

例如:

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

如果number1number4中的任何值小于-1或大于1,则表达式将返回FALSE。

但是,MySQL并没有强制执行CHECK约束。如果您希望实际执行此类约束,则需要将该逻辑放入BEFORE INSERTBEFORE UPDATE触发器中。

  

CHECK子句被解析但被所有存储引擎忽略

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