@antoshka_basenko

Как сделать чтобы строка не вставлялась в БД, если не соблюдается формат поля?

У меня есть таблица customer, в ней поле phone - varchar. Как сделать чтобы при вставке в таблицу записи оно проверяло соответсвует ли поле phone формату и если не соответсвует, то не добавляло запись.
Формат XXX-XX-XX, где X - это цифра
  • Вопрос задан
  • 169 просмотров
Решения вопроса 2
@Akina
Сетевой и системный админ, SQL-программист.
ALTER TABLE customer
ADD CONSTRAINT CHECK(phone REGEXP '^[0-9]{3}-[0-9]{2}-[0-9]{3}$');

https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=71012d...
Ответ написан
Комментировать
DevMan
@DevMan
мне стыдно за ответы выше.

B – валидация (validation).
это должно проверяться приложением, а не СУБД.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
karabanov
@karabanov
Системный администратор
Можно нормализовать номер, вырезав из него всё кроме цифр перед записью и не придумывать валидаторы на стороне базы.
Ответ написан
mayton2019
@mayton2019
Bigdata Engineer
Обычно в продуктовых системах загрузка данных идет в 2 этапа.
1) Грузят данные в специальные сырые таблицы (staging area). Грузят без первичных ключей и без проверок вообще. Вот как есть. С мусором и с битыми кодировками.
2) Запускают специальные процедуры (раньше хранимки) а сейчас - процессы в application которые гоняют все-все бизнес-валидации и загружают то что есть в продуктовые таблицы (бизнес-факты). А по всем битым данным формируют отчёт. Типа не удалось загрузить сто тыщ телефонов.

А то что в топике предлагают на триггерах или на чеках - это так щас не делают. Просто ... головняка много. И никто не будет помнить что за чек или триггер там висит.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы