【问题标题】:How can I enforce certain strings in a MySQL table without using ENUMs?如何在不使用 ENUM 的情况下在 MySQL 表中强制执行某些字符串?
【发布时间】:2014-07-06 08:07:17
【问题描述】:

我曾经在我以前的项目中使用 ENUM。例如,我有一个名为 status 的列,并为 pending, success, fail 提供 ENUM

但是,我听说 ENUM 很糟糕,尤其是在未来发展和进行更改时。

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

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

【问题讨论】:

标签: mysql string enums


【解决方案1】:

你有一些选择

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

【讨论】:

  • “检查约束”是什么意思?你能详细说明第二个选项吗?
  • 在某些数据库引擎(如 SQL-Server)中,您可以定义检查约束。对列有效的值列表(在表定义期间定义)。你也可以在 MySQL 中做到这一点。但是这个设置将在运行时被忽略,因为它还没有在 MySQL 中实现。
  • 第一个选项是建议的选项吗?
  • 那是相当个人的看法。干净的方式将与选项一一起使用。也许我会去tinyint 并在我的应用程序中处理它。但这实际上取决于可能值的数量,以及是否确实存在错误条目的问题。
  • 如果你想添加一个只允许表的特定值的外键约束,那么可以。
猜你喜欢
  • 1970-01-01
  • 2016-01-27
  • 1970-01-01
  • 1970-01-01
  • 2023-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-24
相关资源
最近更新 更多