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

SQLite3中能否用CHECK约束匹配字段前缀?语法报错如何解决?

SQLite CHECK约束匹配字符串前缀问题解答

语法错误原因

你的建表语句存在语法错误:列定义末尾多了一个逗号,且CHECK约束被错误地放在了表定义的括号外部。SQLite要求表级CHECK约束必须包含在CREATE TABLE后的括号内,与列定义处于同一层级。

核心问题解答

  1. SQLite支持此类CHECK约束
    SQLite完全支持使用CHECK约束限制列值的格式,包括通过LIKE匹配字符串前缀的场景。需要注意:
  • 从SQLite 3.37.0(2021-11-27)版本开始,CHECK约束默认自动强制执行;
  • 若使用更早版本,需先执行PRAGMA check_constraints = ON;开启约束检查。
  1. 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 17:04:52