可以使用mysql来限制VARCHAR的每一行,使其长度等于同一行中的INT列吗?

时间:2018-05-26 14:32:57

标签: mysql sql

我在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字段可选用于个性化列表中分组项的显示方式。

用户可以随时更新这些首选项。以下是如何显示项目的粗略示例:

enter image description here

我想找到一种约束每个用户custom_string长度的方法,这样如果它不是空白,它的长度必须与对应的items_per_group完全相同使用javascript和PHP可以很容易地验证用户输入,并且如果数据不符合此要求,则可以防止数据输入数据库,但是,是否有办法设置此值mysql中的约束是否会被拒绝?

1 个答案:

答案 0 :(得分: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时,在应用程序级别检查可能更简单。