检查可空 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}$')
这确保 mobile
是 null
或恰好包含 10 个数字。
如果你想确保phone号码包含只有位但不一定是10位,那么你可以将量词从10
改为+
:
check(mobile is null or mobile regexp '^[0-9]+$')
检查 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}$')
这确保 mobile
是 null
或恰好包含 10 个数字。
如果你想确保phone号码包含只有位但不一定是10位,那么你可以将量词从10
改为+
:
check(mobile is null or mobile regexp '^[0-9]+$')