Можно ли использовать mysql для ограничения длины каждой строки VARCHAR равной столбцу INT в той же строке?

0

У меня два столбца в таблице mysql, которые задаются по предпочтениям пользователя:

custom_string VARCHAR(255) NOT NULL

items_per_row TINYINT UNSIGNED NOT NULL DEFAULT '5'

ПРИМЕР:

+--------------------------------------+
|             preferences              |
+--------------------------------------+
| id | custom_string | items_per_group |
+--------------------------------------+
|  1 |   TRINKETS    |        8        |
+--------------------------------------+
|  2 |               |        5        |
+--------------------------------------+
|  3 |    MYSTUFF    |        7        |
+--------------------------------------+

items_per_row - обязательное поле. Поле custom_string необязательно используется для персонализации способа отображения сгруппированных элементов в списке.

Пользователь может обновлять эти настройки в любое время. Вот приблизительный пример того, как элементы могут отображаться:

Изображение 174551

Я хочу найти способ ограничить длину каждого пользователя custom_string так что если он не пуст, он должен иметь длину, которая точно такая же, как соответствующее значение items_per_group. Я могу легко проверить вход пользователя как с javascript, так и с PHP и предотвратить ввод данных в базу данных, если он не соответствует этому требованию, однако есть ли способ установить это ограничение в mysql, чтобы попытаться строка 'invalid' будет отклонена?

  • 0
    Обычно вы используете проверочные ограничения для реализации этого. Но MySQL не применяет их прямо сейчас (хотя и позволяет определить их по какой-то странной причине).
Теги:

1 ответ

2
Лучший ответ

MySQL не реализует check ограничения. С ними это было бы легко:

alter table preferences add constraint chk_preferences_custom
    check (custom_string is null or length(custom_string) = items_per_group);

Единственный вариант в MySQL - использовать триггер для этой цели.

На практике это может быть проще проверить на уровне приложения при вставке/обновлении custom_string.

  • 0
    Кажется, что триггер будет работать для этой цели, однако, учитывая, что его достаточно просто проверить на стороне сервера, прежде чем даже отправлять запрос, это будет решение, которое я буду использовать сейчас. В любом случае, я рассматриваю возможность перехода на PostgreSQL для этого и будущих проектов.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню