SQLite3如何实现固定数据类型校验 禁止插入非指定类型数据
SQLite3强制字段类型约束的解决方案
SQLite默认使用动态类型系统,不会强制校验字段声明的类型,要实现类型强校验可以根据你的SQLite版本选择以下方案:
方案1:使用严格表模式(适配SQLite 3.37.0及以上版本)
建表时添加STRICT关键字即可开启表级全局类型校验,插入不符合声明类型的数据会直接抛出错误,示例建表语句:CREATE TABLE d_t (Date text) STRICT;此时执行
INSERT INTO d_t(Date) VALUES (123)会直接提示类型不匹配,只有插入'123'这类文本类型的值才会通过校验。方案2:搭配
CHECK约束和TYPEOF函数校验(兼容低于3.37.0的旧版本)
如果你使用的SQLite版本不支持严格模式,可以通过自定义CHECK约束实现类型校验,用TYPEOF()函数获取插入值的实际类型,和目标类型匹配才允许插入:-- 不允许为空的字段写法 CREATE TABLE d_t (Date text CHECK (TYPEOF(Date) = 'text')); -- 如果字段允许为空,调整约束为如下写法 CREATE TABLE d_t (Date text CHECK (TYPEOF(Date) = 'text' OR Date IS NULL));
内容的提问来源于stack exchange,提问作者Ahmed El-Ghorory
相关产品推荐
相关产品推荐

