检查可空 Phone 数字列的约束 - MySQL

Check Constraint for Nullable Phone Numbers Column - MySQL

检查 MySQL 服务器端的约束条件 phone 号码是否仅由数字组成以及是否有十位数字。

我有以下创建 table 查询,其中 mobile 是字段名称,存储 phone 人数:-

CREATE TABLE `users` (
  --Other columns

  `mobile` int UNSIGNED DEFAULT NULL, 

) ENGINE=InnoDB;

如前所述,mobile 列可以为 NULL。因此,我无法应用直接长度检查约束和其他正则表达式约束。如果有的话,什么是可行的检查约束?

P.S。 - 我假设 phone 数字是一个整数。我已经阅读了将其设为 varchar 的建议。

EDIT - (注意版本)

在 8.0 版之前,MySQL 不强制执行检查约束。它允许将它们写入 CREATE TABLE 语句,解析它们并忽略它们。

这里有一些来自 MySQL 参考手册的有用文档:

Prior to MySQL 8.0.16, CREATE TABLE permits only the following limited version of table CHECK constraint syntax, which is parsed and ignored:

CHECK (expr)

已经有大量评论认为 phone 数字应该存储为字符串而不是整数(典型示例是以 0 开头的 phone 数字)。

您可以使用以下检查约束:

check(mobile is null or mobile regexp '^[0-9]{10}$')

这确保 mobilenull 或恰好包含 10 个数字。

如果你想确保phone号码包含只有位但不一定是10位,那么你可以将量词从10改为+:

check(mobile is null or mobile regexp '^[0-9]+$')