如何在不使用枚举的情况下强制MySQL表中的某些字符串?

如何在不使用枚举的情况下强制MySQL表中的某些字符串?,mysql,string,enums,Mysql,String,Enums,我以前的项目中经常使用枚举。例如,我有一个名为status的列,并有pending、success、fail的ENUM 然而,我听说Enum很糟糕,特别是在将来进行增长和更改时 所以,我决定离开Enum。确保插入到MYSQL中的字符串只是那些特定的字符串的最佳方法是什么 有没有一种数据库方法可以做到这一点,或者我必须在应用程序级别做到这一点?您有一些选择 使用具有已定义字符串的另一个表。然后在需要的表中添加外键约束 检查约束当前将被MySQL忽略,因此您不能使用这些约束 使用tinyint并将

我以前的项目中经常使用枚举。例如,我有一个名为
status
的列,并有
pending、success、fail的ENUM

然而,我听说Enum很糟糕,特别是在将来进行增长和更改时

所以,我决定离开Enum。确保插入到MYSQL中的字符串只是那些特定的字符串的最佳方法是什么

有没有一种数据库方法可以做到这一点,或者我必须在应用程序级别做到这一点?

您有一些选择

  • 使用具有已定义字符串的另一个表。然后在需要的表中添加外键约束
  • 检查约束当前将被MySQL忽略,因此您不能使用这些约束
  • 使用
    tinyint
    并将其映射到逻辑中的字符串(如果这对您来说足够)
  • 添加insert和update触发器,用于检查之前的值,并在错误时抛出错误

使用“检查约束”是什么意思?您可以详细说明第二个选项吗?在某些数据库引擎(如SQL Server)中,您可以定义检查约束。对列有效的值列表(在表定义期间定义)。您也可以在MySQL中这样做。但是这个设置在运行时会被忽略,因为它还没有在MySQL中实现。第一个选项是建议的吗?这是个人观点。干净的方法是选择一。也许我会选择一个
tinyint
,然后在我的应用程序中处理它。但这实际上取决于可能值的数量,以及是否出现错误条目的问题。如果要添加只允许表的特定值的外键约束,则选择“是”。