У меня два столбца в таблице 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
необязательно используется для персонализации способа отображения сгруппированных элементов в списке.
Пользователь может обновлять эти настройки в любое время. Вот приблизительный пример того, как элементы могут отображаться:
Я хочу найти способ ограничить длину каждого пользователя custom_string
так что если он не пуст, он должен иметь длину, которая точно такая же, как соответствующее значение items_per_group
. Я могу легко проверить вход пользователя как с javascript, так и с PHP и предотвратить ввод данных в базу данных, если он не соответствует этому требованию, однако есть ли способ установить это ограничение в mysql, чтобы попытаться строка 'invalid' будет отклонена?
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
.