作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设我的 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 到枚举字段的外键约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32943272/
我是一名优秀的程序员,十分优秀!