You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQLite能否设置小数位数约束?单小数位限制实现方案

解答

不需要为了这个需求迁移到MySQL,SQLite本身就支持通过约束实现小数位数限制,你找到的方案是完全可行的。

SQLite采用动态类型系统,声明的字段类型仅代表类型亲和性,不会对写入的数值做强制约束,所以你之前尝试的DECIMAL(n,1)写法无法实现限制效果,这是SQLite的原生设计特性,并非操作错误。

你使用的CHECK约束逻辑CHECK(字段名 = ROUND(字段名,1)),本质是要求写入的数值与保留1位小数后的计算结果完全相等,天然过滤了小数位数超过1位的非法值,方案轻量高效,完全可以满足毫米计量值的存储需求。


具体实现示例
  • 建表语句:
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)

内容的提问来源于stack exchange,提问作者Etsaf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 08:39:02