三个问题,基本相同:
所以我的表有一个字段,它的数据类型是浮点数。但是,只有 64 个可能的值,范围从 0.25 到 16.0(增量为 0.25),我只想允许这些值作为额外的验证层。
我可以将字段设置为大于零吗?
我可以为浮点字段设置最小值和最大值吗?
我可以以某种方式设置增量吗?
或者,我应该考虑:
a) 将其设置为整数并在输入之前将任何输入乘以 4,并将最大值设置为 64。
b)使用非常长的枚举?
三个问题,基本相同:
所以我的表有一个字段,它的数据类型是浮点数。但是,只有 64 个可能的值,范围从 0.25 到 16.0(增量为 0.25),我只想允许这些值作为额外的验证层。
我可以将字段设置为大于零吗?
我可以为浮点字段设置最小值和最大值吗?
我可以以某种方式设置增量吗?
或者,我应该考虑:
a) 将其设置为整数并在输入之前将任何输入乘以 4,并将最大值设置为 64。
b)使用非常长的枚举?
这通常使用 CHECK CONSTRAINT 来完成。不幸的是 MySql 不支持 CHECK CONSTRAINT。您可以改用 BEFORE UPDATE TRIGGER ...
CREATE TRIGGER t BEFORE UPDATE ON yourTable
FOR EACH ROW BEGIN
IF NEW.name --here you put a check for a valid value
SET NEW.name = 1 / 0; --an error is raised - no insert
END IF;
我个人会使用 DECIMAL,而不是 FLOAT。FLOAT 只是您的值的近似值,并且您的值非常具体。
为了强制执行特定值,我将创建一个仅包含这 64 个值的查找表并使用外键。
通常这种事情是在客户端应用程序中强制执行的。但是,如果您为 mysql 搜索“服务器强制数据完整性”,您会找到一些您需要的内容。