当前位置: 首页 > 面试题库 >

MySQL ENUM类型与联接表

伊温书
2023-03-14
问题内容

我的要求

一个表需要维护一个 状态 列。

该列代表5种状态之一。

初步设计

我想我可以将其设为整数列,并使用数值表示状态。

  • 0 =开始
  • 1 =跑步
  • 2 =坠毁
  • 3 =暂停
  • 4 =停止

由于我不希望我的应用程序维护从整数到其字符串描述的映射,因此我计划将它们放置在单独的状态描述表中(依赖于FK关系)。

然后我发现MySQL的ENUM类型与我的要求完全匹配。除了直接依赖MySQL外,使用ENUM类型还有什么陷阱吗?


问题答案:
  • 更改ENUM中的值集需要使用ALTER TABLE,这可能会导致表重组-一项非常昂贵的操作(如果仅在ENUM定义的末尾添加一个新值,但如果删除一个新值,则不会发生表重组。 ,或更改顺序,它会进行表重组)。而更改查找表中的值集就像INSERT或DELETE一样简单。

  • 无法将其他属性与ENUM中的值相关联,例如哪些属性将被淘汰,哪些属性有资格放入用户界面的下拉列表中。但是,查找表可以包含此类属性的其他列。

  • 查询ENUM以获取不同值的列表非常困难,基本上需要您从查询数据类型定义INFORMATION_SCHEMA,并从返回的BLOB中解析该列表。您可以SELECT DISTINCT status从表中尝试,但是只能获取当前正在使用的状态值,该值可能不是ENUM中的所有值。但是,如果将值保留在查找表中,则很容易查询,排序等。

如您所知,我不是ENUM的忠实拥护者。:-)

CHECK约束也是如此,该约束只将列与一组固定值进行比较。尽管MySQL仍然不支持CHECK约束。

更新:MySQL 8.0.16现在实现了CHECK约束。



 类似资料:
  • mySQLenum是一个在命令行下使用的工具,它可以对后台使用MySql数据库的Web应用程序实施自动化的SQL盲注入攻击。它的主要目标是提供一个易于使用的命令行界面接口。MySQLenum的编程语言是c。

  • 什么是SQL和什么是不同的类型?

  • 这些语句(接口vs类型)有什么区别?

  • 关联类型 定义一个协议时, 有时在协议定义里声明一个或多个关联类型是很有用的. 关联类型给协议中用到的类型一个占位符名称. 直到采纳协议时, 才指定用于该关联类型的实际类型. 关联类型通过associatedtype关键字指定. 关联类型的应用 protocol Container { associatedtype ItemType mutating func append(_ i

  • 使用“关联类型”可以增强代码的可读性,其方式是移动内部类型到一个 trait 作为output(输出)类型。这个 trait 的定义的语法如下: // `A` 和 `B` 在 trait 里面通过`type` 关键字来定义。 // (注意:此处的 `type` 不同于用作别名时的 `type`)。 trait Contains { type A; type B; // 通常

  • TypeScript中的这些语句(与)之间有什么区别?