Добавить в соответствии с Ограничением CHECK .
Как ограничение столбца:
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);
Если вы используете старую MySQL версию, которая не поддерживает ограничения CHECK, используйте пакет триггеров.
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}'
. Это также позволит вам сохранять телефонные номера, начинающиеся с нуля.