mysql - 将插入 mysql 的记录限制为准确的 9 个数字
问题描述
我的数据库中有一个字段是电话号码,我想让它只接受确切的 9 个数字
mysql版本:5.7.31
解决方案
根据CHECK Constraint添加。
作为列约束:
CREATE TABLE my_table (
...
phone_number INT
NOT NULL
CHECK (phone_number BETWEEN 100000000 AND 999999999),
... );
或作为表约束:
CREATE TABLE my_table (
...
phone_number INT
NOT NULL,
CONSTRAINT phone_9_digits
CHECK (phone_number BETWEEN 100000000 AND 999999999),
... );
约束只处理一列 - 所以列约束类型是首选。
如何对现有表执行此操作?
更改列定义或表定义。例如,
ALTER TABLE my_table
CHANGE COLUMN phone_number
phone_number INT
NOT NULL
CHECK (phone_number BETWEEN 100000000 AND 999999999);
如果您使用不支持 CHECK 约束的旧 MySQL 版本,请使用触发器包。
CREATE TRIGGER tr_bi_check_phone_for_9digits
BEFORE INSERT -- and the same for BEFORE UPDATE
ON my_table
FOR EACH ROW
BEGIN
IF NEW.phone_number NOT BETWEEN 100000000 AND 999999999 THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'Phone Number must have 9 digits strictly.';
END IF;
END
如果phone_number
存储为字符串,则phone_number BETWEEN 100000000 AND 999999999
可以替换检查条件,例如,
phone_number REGEXP '[0-9]{9}'
这也将允许您存储从零开始的电话号码。
推荐阅读
- c# - 检测到的包降级:Microsoft.NETCore.App 从 2.1.3 到 2.1.0
- php - PHP函数中的可选参数不考虑顺序
- c++ - 从 Chrome 获取帧(简单游戏)并使用 OpenCV 显示它们
- microsoft-graph-api - Microsoft Graph 订阅过期日期时间不正确
- sql - Connect By Prior 忽略无父母的孩子
- r - 在 R 中,有没有办法使用正则表达式或类似的东西来提取电子邮件字符串的第一个和最后一个字符?
- ios - 父视图控制器扩展
- ios - 使用 Swift 4 和 Firebase 从具有唯一 ID 的多个用户读取位置
- c++ - C++11 书籍符号
- amazon-s3 - s3端点超时错误