首页 > 解决方案 > 将插入 mysql 的记录限制为准确的 9 个数字

问题描述

我的数据库中有一个字段是电话号码,我想让它只接受确切的 9 个数字

mysql版本:5.7.31

标签: mysqldatabasemariadb

解决方案


根据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}'

这也将允许您存储从零开始的电话号码。


推荐阅读