三個問題,基本都一樣:MySQL字段值,可以定義一個浮點數超出數字計數嗎?
所以我的表有一個字段,它的數據類型是float。只有64個可能的值,但是,從0.25到16.0(0.25的增量),我想只允許這些值作爲額外的驗證層。
我可以設置字段大於零嗎?
我可以爲float字段設置最小值和最大值嗎?
我可以用某種方式設置增量嗎?
或者,我應該考慮:
a)設定它爲一個整數和它進入在之前的任何輸入乘以4,並設定爲64
B A的最大值)使用
一個非常長的枚舉?三個問題,基本都一樣:MySQL字段值,可以定義一個浮點數超出數字計數嗎?
所以我的表有一個字段,它的數據類型是float。只有64個可能的值,但是,從0.25到16.0(0.25的增量),我想只允許這些值作爲額外的驗證層。
我可以設置字段大於零嗎?
我可以爲float字段設置最小值和最大值嗎?
我可以用某種方式設置增量嗎?
或者,我應該考慮:
a)設定它爲一個整數和它進入在之前的任何輸入乘以4,並設定爲64
B A的最大值)使用
一個非常長的枚舉?這通常使用CHECK CONSTRAINT完成。不幸的是MySql不支持CHECK CONSTRAINT。你可以使用BEFORE UPDATE觸發器,而不是...
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;
通常這樣的事情在客戶端應用程序強制執行。但是,如果您爲mysql搜索「服務器強制執行的數據完整性」,則會發現一些您需要的內容。
我個人會使用DECIMAL,而不是FLOAT。 FLOAT只是您的價值的近似值,而您的價值則非常具體。
強制執行特定值,我會創建一個查找表,只有那些64值,並使用外鍵。
通常?我會說任何一個數據庫都可以執行的應該在數據庫級別上執行,而不是在應用程序中執行。 – Joey
我同意,但與數據庫級別的驗證相比,應用程序級別相當有限。 – dave