首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么MySQL要创建临时表来重命名枚举值?

为什么MySQL要创建临时表来重命名枚举值?
EN

Stack Overflow用户
提问于 2016-02-09 10:27:04
回答 1查看 304关注 0票数 1

我要重命名一个枚举值。根据文档枚举是一个

在表创建时列规范中显式枚举的允许值列表。

变表语法文档的MySQL声明:

在大多数情况下,ALTER会临时复制原始表。

然而,也有例外:

通过向有效成员值列表的末尾添加新枚举或SET成员来更改ENUM或set列的定义,只要数据类型的存储大小不更改。

重命名列。

对于这种异常,不需要创建临时表。因此,ALTER查询更快。

从上面的语句中,我得出结论,MySQL不需要创建一个临时表,只需重命名枚举的值。毕竟:值的对应(内部)数字表示保持不变。因此,即使是表中的值的赋值也不应受到影响。

我对预期的行为运行了一些测试查询:

代码语言:javascript
复制
mysql> CREATE TABLE `test` (`type` enum('foo','bar') NOT NULL DEFAULT 'foo');
Query OK, 0 rows affected (0.01 sec)

mysql> show global status where Variable_name = 'Created_tmp_tables';
+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| Created_tmp_tables | 253   |
+--------------------+-------+
1 row in set (0.00 sec)

mysql> ALTER TABLE test CHANGE `type` type enum('foo','baz') NOT NULL DEFAULT 'foo';
Query OK, 0 rows affected (0.01 sec)

mysql> show global status where Variable_name = 'Created_tmp_tables';
+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| Created_tmp_tables | 254   |
+--------------------+-------+
1 row in set (0.00 sec)

Created_tmp_tables显示在更改过程中创建了一个临时表。

为什么MySQL会这样做呢?还是没有针对这类操作进行优化?

EN

回答 1

Stack Overflow用户

发布于 2022-06-09 16:41:25

我总是忘记它是如何工作的,偶尔也会有同样的问题,我很高兴你问了这个问题,并在你的问题中贴出了答案:)

通过添加新的枚举或将成员设置到有效成员值的列表的末尾来更改ENUM或SET列的定义

与更改ENUM值本身不同。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35289576

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档