【发布时间】:2021-11-14 12:36:26
【问题描述】:
问题
我正在使用 SQLite,我有一堆字段表示以毫米为单位的度量,我想限制为小数点后 1 个数字(例如 1.2 ; 12.2 ; 122.2 等等)。
我见过诸如将DECIMAL(n,1) 作为类型的例子,我试过了,但它似乎没有限制值(我想这是因为它不是实际的 SQLite 类型)。
我需要迁移到 MySQL 才能工作吗?
编辑(找到解决方案)
我使用了 Dan04 的回答:它很简单,而且效果很好:
► 表格如下:
CREATE TABLE demo(
a REAL CHECK(a = ROUND(a,1)),
b REAL CHECK(b = ROUND(b,1)),
c REAL GENERATED ALWAYS AS (a+b)
)
► 插入相关数据:INSERT INTO demo (a,b) values (41.4,22.6)
► 插入错误数据:INSERT INTO demo (a,b) values (1.45,22.68) 输出:
Execution finished with errors.
Result: CHECK constraint failed: a = ROUND(a,1)
At line 1:
insert into demo (a,b) values (1.45,22.68)
【问题讨论】:
-
你不能在应用程序级别这样做吗?
-
你的意思是像
CREATE TABLE demo(mm REAL NOT NULL CHECK(cast(mm * 10 as 'int') == mm * 10))这样防止输入超过1 个小数点后的数字吗?
标签: mysql sqlite constraints decimal sqldatatypes