约束检查MySQL服务器端电话号码是否仅包含数字以及是否包含十位数字。
我有以下创建表查询,其中mobile
是该字段的名称,用于存储人员的电话号码:-
CREATE TABLE `users` (
--Other columns
`mobile` int UNSIGNED DEFAULT NULL,
) ENGINE=InnoDB;
如所示,mobile
列可以为NULL。因此,我不能应用直接长度检查约束和其他正则表达式约束。什么是可行的检查约束(如果有)?
P.S。 -我假设电话号码是整数。我已阅读将其设为varchar的建议。
编辑- (注意版本)
在8.0版之前,MySQL没有强制执行检查约束。它允许将它们写入CREATE TABLE语句中,对其进行解析并忽略它们。
这里是MySQL参考手册中的一些有用的文档:
在MySQL 8.0.16之前,CREATE TABLE仅允许以下限制表CHECK约束语法的版本,已解析并忽略:
检查(表达式)
已经广为注释,电话号码应以字符串而不是整数存储(典型的例子是以0
开头的电话号码。]
您可以使用以下检查约束:
check(mobile is null or mobile regexp '^[0-9]{10}$')
这确保mobile
是null
或正好包含10位数字。
如果要确保电话号码包含only位数字,但不一定是10位数字,则可以将量词从10
更改为+
:
check(mobile is null or mobile regexp '^[0-9]+$')