我敢肯定这要么完全不可能,要么真的很容易:
如果我正在创建一个表并且我希望其中一个列具有有限的选项,那么我似乎使用了 ENUM 或 SET 值类型。但我必须在那一刻定义可能的值。如果我有另一个表有两列,一个主键列和一个数据列,并且我希望我的新表的 ENUM 设置为现有列的主键怎么办?
我确定我可以直接写入值,但理想情况下,我需要将新值输入到列表表中,并且具有 enum 列的表只接受值选择将包含任何新值添加到该列表中。
每次将某些内容添加到列表中时,这是否可能不需要操作新表的结构?
最简单的方法是使用没有约束的常规列。如果您对所有当前值感兴趣,请使用 DISTINCT 查询它们:
select distinct YourColumn from YourTable
这样,您无需进行任何维护,并且可以在表中存储您喜欢的任何内容。
您提到的外键表也是一个不错的选择。外键将限制原始列。在执行实际插入之前,运行查询以扩展“枚举”表:
insert into EnumTable (name)
select 'NewEnumValue'
where not exists (select * from EnumTable where name = 'NewEnumValue')
不知道你到底想达到什么目的;限制列,但当有人打破限制时自动扩大选择?
我认为这个链接有帮助: http ://dev.mysql.com/doc/refman/5.0/en/enum.html
在用户评论开始讨论它:
“在 MySQL 5.0 中,您可以将枚举的值转换为动态定义的值表,然后它有效地提供了一种语言中立的方法来处理这种转换(而不是依赖于 PHP、Tcl、C、C++、Java、等具体代码)。”
他使用存储的 PROCEDURE