我面临着重命名枚举值的价值。根据{{3}}枚举是
在创建表时在列规范中显式枚举的允许值列表。
MySQL的documentation文档声明:
在大多数情况下,ALTER TABLE会生成原始表的临时副本。
但也有例外:
通过添加新枚举或将成员设置到有效成员值列表的末尾来更改ENUM或SET列的定义,只要数据类型的存储大小不会更改。
或
重命名列。
对于此异常,不必创建临时表。因此ALTER查询更快。
从上面的陈述我得出结论,MySQL不必创建一个临时表来重命名枚举的值。毕竟:值的相应(内部)数字表示保持不变。因此,即使表中的值分配也不会受到影响。
我对预期的行为运行了一些测试查询:
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的行为是否有这样的原因?或者它只是没有针对这种操作进行优化?