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

SQL CHECK()约束如何实现输入值为5位纯数字的校验

问题排查与修复方案

核心错误点

  • 列名不匹配:你建表时定义的待校验字段是PIN,但两个CHECK约束里都误用了不存在的字段title,导致约束完全没有作用到目标字段上。
  • LIKE语法兼容性问题:标准SQL的LIKE操作符不支持[0-9]这种正则字符组匹配规则,该写法仅在SQL Server中生效,MySQL、SQLite、PostgreSQL等主流数据库都不支持该语法,所以校验失效。

各数据库对应修复写法

你可以根据自己使用的数据库选择对应写法,以下写法都可以直接实现「5位纯数字」的校验,不需要单独加长度判断,正则本身已经覆盖了长度限制:

  1. SQL Server
    改对列名即可沿用原有逻辑:
CREATE TABLE Code (
  PIN TEXT NOT NULL,
  CHECK(PIN LIKE '[0-9][0-9][0-9][0-9][0-9]')
);
  1. MySQL 8.0+
    使用REGEXP正则匹配:
CREATE TABLE Code (
  PIN TEXT NOT NULL,
  CHECK(PIN REGEXP '^[0-9]{5}$')
);

注:MySQL 5.7及更早版本不支持CHECK约束的执行,需要用触发器或者应用层做校验。

  1. PostgreSQL
    使用正则匹配操作符~:
CREATE TABLE Code (
  PIN TEXT NOT NULL,
  CHECK(PIN ~ '^[0-9]{5}$')
);
  1. SQLite
    使用支持字符组匹配的GLOB操作符:
CREATE TABLE Code (
  PIN TEXT NOT NULL,
  CHECK(PIN GLOB '[0-9][0-9][0-9][0-9][0-9]')
);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 15:48:03