假设我的 MySql 数据库中有一个已经存在的表。该表有一个字段,其定义如下:
`field_a` enum('value_1', 'value_2', 'value_3')
现在我想用 field_b
定义另一个表。由于外键约束,field_b
应该引用 field_a
。将 field_b
定义为精确的 enum
类型,如 field_a
接缝是多余的。有没有办法使 field_b
为 varchar
类型,并仍然引用 enum
以确保只有适当 的有效值>enum
被写入其中?
最佳答案
据我从理论和实践来看,现在不可能。另外,official documentation FOREIGN KEY
状态:
Corresponding columns in the foreign key and the referenced key must have similar data types.
现在,虽然 ENUM
和 VARCHAR
都被分类为 string types ,它们不被视为相似的数据类型。 (至少对于这个目的来说足够相似)。我通过实验发现,只有一种与 ENUM
类似的数据类型是 SET
。但即使使用引用 ENUM
-to-ENUM
或 ENUM
-to-SET
可能值列表父表和子表中的内容不必相同。因此,我怀疑即使您可以使用 VARCHAR,它也不会以任何方式帮助您检查或强制值完整性。
我建议使用查找表而不是ENUM
。这是更灵活的解决方案,表的元数据冗余更少。
关于mysql - 使用 MySql 从 varchar 到 enum 字段的外键约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32943272/