mysql是否可以根据其他表值定义SET类型的外键?

时间:2017-05-22 10:35:06

标签: mysql

有table1和table2,目前table1中有一个外键:

FOREIGN KEY (foreign_ref) REFERENCES `table2` (chars)
    ON UPDATE CASCADE,

是否可以设置SET类型的foreign_ref,并从table2.chars中设置可能的设置值?甚至更好的是,在将新行插入table2时使foreign_ref自动添加可能的值?

更新

实际上,我希望应用的场景是table1是一个item表,table2是一个tags表。但是table1中的1个项目可以有多个标签。 table2不会包含很多行,但可能经常修改,我可能需要添加更多标记,以便附加到将来的项目中。向table2添加行意味着可以使用新标记以供将来使用。不修改现有的。

很简单,我希望table1中的列可以包含不同数量的标记,并对其进行约束以仅允许它从固定的值集中进行选择。

1 个答案:

答案 0 :(得分:0)

  

是否可以使用SET

类型的foreign_ref

是的,从技术上来说这是可能的,但这样做没有实际意义。请参阅以下几点了解原因。

  

从table2.chars

中获取可能的设置值

不,不可能,set的值列表在表头中定义,只能通过alter table语句进行更改。

  

在将新行插入table2

时,使foreign_ref自动添加可能的值

不,外键无法向set值列表添加新值。同样,您需要使用alter table来更改值列表。

总体来说:如果某个字段可能包含相对较小的值列表且该列表不太可能更改,则最好使用set数据类型,因为您可以避免添加另一个查找表和外键。一个很好的例子可能是基本方向(北,西等):你有4个,而且这个列表不会改变。如果您需要动态编辑字段可能具有的值列表,那么最好使用查找表和外键。