4

我想更新 RDS Mysql 中的 Enum 并向列添加值。我想更新同一张表中存在的大量数据。我假设在更新表的模式时,表被锁定,这显然涉及我的服务将关闭的停机时间。我的 MysqlServer 版本是 5.5.40。

但是当我向 Enum 添加一个值时,RDS Mysql 服务器是否足够智能,可以检测到它不需要扫描现有行并在执行简单查询时快速更新架构,而无需扫描所有现有行的值枚举列的?

4

2 回答 2

4

在 Mysql 5.5.46 上,我在现有列表中添加了一个新的 ENUM 值:

enum ('a','b','c','d')

enum ('a','b','c','d','e')

对于 500k 行,ALTER TABLE CHANGE [column] 花费了不到 1 秒的时间。

这似乎是错误:https : //bugs.mysql.com/bug.php?id=45567 它似乎已在 5.1.40、5.5.0 和 6.0.14 中修复

在 Mysql 5.6.33 上,我尝试过

enum ('a','b','c','d')

enum ('a','b','c','e','d')

并且 ALTER TABLE CHANGE [column] 没有将现有的 d 更新为 e,如下所述:https ://dba.stackexchange.com/questions/11484/is-it-possible-to-change-enum-lists/11485#11485

我找不到修复此错误的版本。

于 2018-04-26T15:08:40.030 回答
3

坏消息,你似乎不走运。

http://komlenic.com/244/8-reasons-why-mysqls-enum-data-type-is-evil/

文章镜子

问题是更改 ENUM 列的成员列表会使用 ALTER TABLE 重新构造整个表,这可能会耗费资源和时间。如果您有 ENUM('red', 'blue', 'black') 但需要将其更改为 ENUM('red', 'blue', 'white'),MySQL 需要重建您的表并查看每条记录以检查现在无效的值“黑色”。MySQL 简直是愚蠢的,当你所做的只是在成员列表的末尾添加一个新值时,它甚至会这样做!(传闻将来会更好地处理附加 ENUM 成员列表,但我怀疑这是一个高优先级的功能。)

于 2015-07-09T04:30:42.343 回答