首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我是否可以将ENUM值从小写更改为studlyCase,而不进行重新索引?

问我是否可以将ENUM值从小写更改为studlyCase,而不进行重新索引?
EN

Database Administration用户
提问于 2017-03-17 11:49:53
回答 1查看 1.4K关注 0票数 1

我有几张大桌子,每个表中都有枚举(例如):

代码语言:javascript
复制
ENUM ('webmasters', 'stackexchange', 'stackoverflow')

文档化说,返回值是ENUM定义的小写,所以我现在遇到了一个问题,因为我需要studlyCase中的返回值:

代码语言:javascript
复制
ENUM ('webMasters', 'stackExchange', 'stackOverflow')

实际上,我只需要从定义的枚举值的大列表中更改一个值,而且该值的表中还没有数据。如果它是物质-这个值几乎在枚举定义的末尾。

这些表格非常庞大--数以千万计的数据。所以这是我的问题-我可以改变表,这样索引就不会被重新计算?

EN

回答 1

Database Administration用户

回答已采纳

发布于 2017-03-17 20:24:00

枚举物理存储在表中,其中有一个数字,该数字映射到枚举的位置值。

您可以修改您的列以更改枚举,并且不应该遇到与存储的数据值有关的问题(安全总比抱歉好--为了以防万一,对表进行备份)。

枚举会带来一些您可能不知道的缺点。下面是一个讨论枚举优点的stackexchange.com链接。

使用ENUM与整数类型的优缺点?

在这里,我们创建一个带有一列枚举的表。

代码语言:javascript
复制
mysql> create table mathisr.test (c1 enum  ('webmasters', 'stackexchange', 'stackoverflow'));
Query OK, 0 rows affected (0.00 sec)

mysql> insert into test values (1),(2),(3);
Query OK, 3 rows affected (0.01 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> select * from test;
+---------------+
| c1            |
+---------------+
| webmasters    |
| stackexchange |
| stackoverflow |
+---------------+
3 rows in set (0.00 sec)

注意,在修改列以用不同的大小写表示值后,枚举将显示新的值。

代码语言:javascript
复制
mysql> alter table test modify c1 enum   ('webMasters', 'stackExchange', 'stackOverflow');
Query OK, 0 rows affected (0.00 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> select * from test;
+---------------+
| c1            |
+---------------+
| webMasters    |
| stackExchange |
| stackOverflow |
+---------------+
3 rows in set (0.00 sec)

下面的命令演示如何在枚举中添加值.

代码语言:javascript
复制
mysql mathisr> alter table test modify c1 ENUM  ('webMasters', 'stackExchange', 'somethingNew', 'stackOverflow');
Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> select * from test;
+---------------+
| c1            |
+---------------+
| webMasters    |
| stackExchange |
| stackOverflow |
+---------------+
3 rows in set (0.00 sec)

当我们查看数据时,我们将看到MySQL实际上更改了存储的数字,以容纳插入到枚举中间的新值。采用新的价值将产生索引的影响。

代码语言:javascript
复制
mysql> alter table test modify c1 tinyint;
Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> select * from test;
+------+
| c1   |
+------+
|    1 |
|    2 |
|    4 |
+------+
3 rows in set (0.00 sec)
票数 2
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/167447

复制
相关文章

相似问题

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