SQLite3中能否用CHECK约束匹配字段前缀?语法报错如何解决?
SQLite CHECK约束匹配字符串前缀问题解答
语法错误原因
你的建表语句存在语法错误:列定义末尾多了一个逗号,且CHECK约束被错误地放在了表定义的括号外部。SQLite要求表级CHECK约束必须包含在CREATE TABLE后的括号内,与列定义处于同一层级。
核心问题解答
- SQLite支持此类CHECK约束
SQLite完全支持使用CHECK约束限制列值的格式,包括通过LIKE匹配字符串前缀的场景。需要注意:
- 从SQLite 3.37.0(2021-11-27)版本开始,CHECK约束默认自动强制执行;
- 若使用更早版本,需先执行
PRAGMA check_constraints = ON;开启约束检查。
- LIKE并非仅用于SELECT语句
LIKE操作符可以在多种SQL语句中使用,包括CHECK约束、WHERE子句、HAVING子句等,并非局限于SELECT查询。
正确的建表语句
CREATE TABLE people ( "firstname" TEXT, CHECK(LIKE('ca%', "firstname")) );
测试验证
- 插入符合前缀要求的值会成功:
INSERT INTO people ("firstname") VALUES ('Callie'); - 插入不符合要求的值会被拦截,返回约束违反错误:
INSERT INTO people ("firstname") VALUES ('Erik'); -- 错误信息:CHECK constraint failed: people
内容的提问来源于stack exchange,提问作者leetbacoon
相关产品推荐
相关产品推荐

