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

如何在MySQL中为10位手机号码添加CHECK约束?

为MySQL手机号字段添加10位数字的CHECK约束

首先注意:MySQL 8.0.16及以上版本才会强制执行CHECK约束,更早的版本仅支持CHECK语法但不会实际验证约束条件,如果你用的是旧版本,建议改用触发器或者应用层验证。

创建表时添加约束

推荐用CHAR(10)或VARCHAR(10)存储手机号(避免INT类型丢失前导0、超出范围的问题),同时通过正则表达式约束确保是纯10位数字:

CREATE TABLE users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    phone CHAR(10) NOT NULL,
    CHECK (phone REGEXP '^[0-9]{10}$')
);

^[0-9]{10}$的含义:

  • ^ 匹配字符串开头
  • [0-9] 匹配单个数字字符
  • {10} 指定必须连续匹配10次
  • $ 匹配字符串结尾
    这样既能保证长度为10,又能确保所有字符都是数字。

为已有表添加约束

如果表已经存在,执行以下语句添加CHECK约束:

ALTER TABLE users
ADD CONSTRAINT chk_phone_valid CHECK (phone REGEXP '^[0-9]{10}$');

验证约束效果

插入符合要求的数据会成功:

INSERT INTO users (phone) VALUES ('1234567890'); -- 成功

插入不符合要求的数据会被拒绝:

INSERT INTO users (phone) VALUES ('123456789'); -- 长度不足10,失败
INSERT INTO users (phone) VALUES ('123456789a'); -- 包含非数字字符,失败

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 05:07:12