首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

mysql enum值新增

基础概念

MySQL中的ENUM是一种字符串对象,用于指定一个列可以拥有的合法值列表。ENUM类型的列在创建时需要指定一个由逗号分隔的合法值列表。当插入数据时,如果插入的值在ENUM列表中,则会成功插入,否则会插入一个空字符串,并产生一个警告。

相关优势

  1. 简化数据模型:ENUM类型可以简化数据库设计,因为它将一组固定的值定义为一个类型。
  2. 节省存储空间:ENUM类型使用较少的磁盘空间,因为它们以整数形式存储,并且每个枚举值只占用一个或两个字节。
  3. 提高查询效率:由于ENUM值是整数,所以查询和排序操作通常比VARCHAR类型更快。

类型

ENUM类型只有一个值,即ENUM(M)。

应用场景

ENUM类型适用于那些列的值是固定且有限的场景,例如性别(男、女)、状态(待审核、已审核、已拒绝)等。

新增ENUM值

要向MySQL中的ENUM列新增值,需要执行以下步骤:

  1. 备份数据:在进行任何结构更改之前,务必备份数据库。
  2. 修改表结构:使用ALTER TABLE语句修改ENUM列的定义,添加新的值。

示例代码:

代码语言:txt
复制
ALTER TABLE your_table_name MODIFY your_enum_column ENUM('value1', 'value2', 'new_value');

注意:修改ENUM列的定义可能会导致数据丢失或不一致,因此请谨慎操作。

遇到的问题及解决方法

问题1:修改ENUM列定义时遇到错误

原因:可能是由于新添加的值与现有数据冲突,或者由于其他数据库限制。

解决方法:

  • 确保新添加的值不与现有数据冲突。
  • 检查数据库版本和设置,确保支持修改ENUM列定义。

问题2:修改ENUM列定义后数据不一致

原因:可能是由于修改过程中发生了错误,或者由于应用程序逻辑依赖于旧的ENUM值。

解决方法:

  • 在修改ENUM列定义之前,仔细检查并测试修改操作。
  • 更新应用程序逻辑,以适应新的ENUM值。

参考链接

请注意,在进行任何数据库结构更改时,都应谨慎操作,并确保充分测试以避免潜在问题。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

mysqlENUM类型

ENUM类型 ENUM类型也叫作枚举类型,ENUM类型的取值范围需要在定义字段时进行指定。设置字段时,ENUM类型只允许从成员中选取单个,不能一次选取多个。...ENUM类型的成员个数的上限为65535个。...举例: 创建表如下: CREATE TABLE test_enum( season ENUM('春','夏','秋','冬','unknow') ); 添加数据: INSERT INTO test_enum...] 当添加多个定义的,也会报错 [在这里插入图片描述] 可以使用索引进行枚举元素的调用,下标从 1 开始# 允许按照角标的方式获取指定索引位置的枚举 INSERT INTO test_enum VALUES...('1'),(3); SELECT * FROM test_enum;[在这里插入图片描述] 没有限制非空的情况下,可以添加null# 当ENUM类型的字段没有声明为NOT NULL时,插入NULL

1.7K20

MySQL枚举类型enum字段在插入不在指定范围的时, 是否是”插入了enum的第一个”?…「建议收藏」

刚刚在看>一书的”ENUM类型”一节, 以下面的代码举例, 得出结论: “还可以看出对于不在ENUM指定范围内的时, 并没有返回警告, 而是插入了enum(‘M’, ‘F’)的第一个...还是因为MySQL的版本问题呢 mysql> create table test(gender enum('M', 'F')); Query OK, 0 rows affected (0.12 sec)...这个相当于是一个警告信息,在我本地测试的 5.7 中,直接插入会报错,但是使用 ignore 后,数据能被强制插入,但是是空。...INSERT ignore INTO user (sex) VALUES (5); 在服务器使用 MySQL 5.5 测试 无论是否添加 ignore 数据都能被插入,但是是空。...总结:报错跟版本有关,5.5版无论是否添加igonre都可以插入,但是空; 5.7版本添加ignore可以插入,但是空; 不添加直接报错”ERROR 1265 (01000): Data truncated

1.8K20
  • MySQLENUM类型学习--MySql语法

    ENUM是一个字符串对象,其来自表创建时在列规定中显式枚举的一列。...在某些情况下,ENUM也可以为空字符串('')或NULL: · 如果你将一个非法插入ENUM(也就是说,允许的列之外的字符串),将插入空字符串以作为特殊错误。...这说明你可以使用下面的SELECT语句来找出分配了非法ENUM的行: · mysql> SELECT * FROM tbl_name WHERE enum_col=0;...当创建表时,ENUM成员的尾部空格将自动被删除。 当检索时,保存在ENUM列的使用列定义中所使用的大小写来显示。请注意可以为ENUM列分配字符集和 校对规则。...例如,你可以这样从ENUM列搜索数值mysql> SELECT enum_col+0 FROM tbl_name; 如果将一个数字保存到ENUM列,数字被视为索引,并且保存的是该索引对应的枚举成员

    1.4K20

    Mysql 8.0 新增特性

    数据字典 新增了事务型的数据字典,用来存储数据库对象信息 之前,字典数据是存储在元数据文件和非事务型表中的 2....InnoDB 提升 完善了对自增计数器(auto-increment counter)的管理,例如设置了计数器的初始,在服务器重启后也不会受到影响;执行 ROLLBACK 也不会导致计数器的被重用...InnoDB memcached 插件支持在一个查询中获取多个key/value对儿,并可以进行范围查询 新增了动态配置项 innodb_deadlock_detect,用来禁用死锁检查,因为在高并发系统中...()(相关文章:体验 Mysql 操作 JSON 文档、体验 MySQL 8.0 JSON聚合函数) 新加一个工具函数 JSON_PRETTY(),可以对 JSON 进行格式化,提高可读性 在查询中使用...order by 对 JSON 进行排序时,每个的 sort key 的长度将是可变的,而不再是固定的1K,有两个好处,1)更高效的使用排序缓冲空间,更多的数据可以在内存中,避免不必要的磁盘访问;

    1.7K110

    MySQL精选 | 枚举类型ENUM的DDL变更测试

    测试基于InnoDB存储引擎上,对MySQL数据库枚举类型ENUM的字段进行DDL变更操作,是否需要重新创建表呢?对数据库的事务处理有何影响?对数据库的数据服务提供有何性能影响?通过本文了解下。...修改枚举类型字段定义的默认,且新默认不在枚举列表中 root@localhost : mysqlops 02:39:15> ALTER TABLE mysqlops_set_enum MODIFY...字段值域列表中某个枚举,则会出现: 存在多少条要删除的枚举记录数,就会产生多少条警告信息(注:警告信息最大65535条); 被删除枚举对应的字段的记录,会发生截断,并且用空字符串填充; g....MySQL数据库枚举类型字段的DDL变更操作,属于枚举类型字段特有的内容: 枚举类型字段的枚举数据值域列表,以尾部追加枚举元素的方式,不会出现锁表等; 枚举类型字段的枚举数据值域列表中,若是调整枚举类型枚举元素的顺序...,不会能起到MySQL数据库表索引的功能; 枚举类型字段存储的数据,则是枚举类型枚举元素的序列编号,而不是真实的字符串数据,而是通过其内部对照表的方式转换而实现的;

    3K30

    MySQLenum 插入的时候注意事项

    如果不带引号插入的话,实际上是插入的key(如上面的例子中 INSERT INTO t1 (b) VALUES (4),插入的是b列第四个default,也就是取enum('4','3','2','1...下标范围的 Query OK, 1 row affected Time: 0.012s [test] > INSERT INTO t1 (b) VALUES ('5');   ---> 插入一个不在enum...ENUM枚举     一般不建议使用,后期不便于扩展。任何不在枚举的范围的插入都会报错,一般用tinyint替代ENUM比较合适。      ENUM的字段不区分大小写。...utm_source=tuicool&utm_medium=referral) 在建立enum类型的字段时,我们会给他规定一个范围比如 enum('a','b','c'),这时mysql内部会建立一张hash...同样,enummysql手册上的说明: ENUM('value1','value2',...) 1或2个字节,取决于枚举的个数(最多65,535个) 除非enum的个数超过了一定数量,否则他所占的存储空间也总是

    1.1K31

    MySQL Shell 8.0.22的新增功能

    可以在decodeColumns选项中指定任意SQL表达式,该选项由MySQL服务器针对每个加载的行进行转换。...该功能允许在导入或迁移表时对数据进行转换,规范化和/或重新规范化,以及将简单的Extract-Transform-Load工作流程实现为MySQL Shell脚本。...在MySQL Shell 8.0.21中创建的转储文件在可用时已经存储了GTID_EXECUTED的。在8.0.22版本中,添加了一个新的updateGtidSet选项。...从MySQL 5.6转储 现在可以从MySQL 5.6转储并将这些转储加载到MySQL 5.7或8.0中。但是,从MySQL 5.6转储时,不支持对用户帐户进行转储。...MySQL InnoDB Cluster 与MySQL Server中一样,对复制相关功能中已弃用的术语进行了更新,同时在必要时保持向后兼容性。

    2.5K30

    MySQL 8.0中的新增功能

    GROUP BY诸如ROLLUP产生超集合行的扩展,其中所有的集合由空表示。使用该GROUPING()函数,您可以区分表示超常聚合行中所有的集合的null与NULL常规行中的。...MySQL 8.0添加了一个叫做提示SET_VAR。该SET_VAR提示将针对只剩下一语句给定的系统变量设置的。因此,语句结束后,该将重置为先前的。...JSON MySQL 8.0增加了新的JSON函数,并提高了排序和分组JSON的性能。 JSON路径表达式中的范围的扩展语法 MySQL 8.0扩展了JSON路径表达式中范围的语法。...配置变量 MySQL的8.0增加了对配置变量,如变量名,有用的信息最小/最大,这里 的电流是从哪里来的, 谁进行了更改,并在它被做。...其他特性 更好的默认MySQL团队中,我们密切关注MySQL的默认配置,旨在为用户提供最佳的现成体验。MySQL 8.0将30多个默认值更改为我们认为更好的

    2.3K30

    MySQL不停服务下新增从库

    背景: 随着网站访问量的增长,一主一从的架构已经无法满足业务需求,需要增加一到两台从库,我们需要在保证业务正常运行的情况下新增从库 实施: 1、首先需要保证主从两台机器间的正常通信 1 -A INPUT...,然后在进行还原操作 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 一定要先停止数据库,然后再清空数据目录下的所有数据(全量备份时) service mysql...stop cd /usr/local/mysql rm -rf data/* 对数据进行准备工作,合成可用的一致的数据,--use-memory可以加速准备工作的完成 innobackupex...--apply-log /data/mysql_backup/full_backup --use-memory=2G --user=root --password=123456 或者 innobackupex...33-22 或者 innobackupex --defaults-file=/etc/my.cnf --copy-back /testdir/2018-02-12_17-33-22 chown mysql

    1.4K20

    MySQL NULL特性

    NULL是一种“没有类型”的,通常表示“无”,“未知”,“缺失”,“超界”,“不在其中”等,我们在日常运用中很容易和NULL字符串混淆,这里大致整理了下NULL的一些特性,以便能够正确使用NULL...。...2)NULL字符串可以当作普通字符串进行处理,而NULL的判断只有is null和 is not null,见第5点 3,插入数据时若不指定,如果没其它默认,会用默认NULL 4,当插入大写...NULL字符时,就很难区别NULL是NULL还是NULL字符串了,这时需要用到NULL的判断,NULL的判断只有is NULL和is not NULL 通过肉眼很难区别,这里通过NULL的判断...7,和NULL的逻辑运算,is NULL运算只有null is null为真返回数字1,is not NULL运算只有 null is not null为假返回数字0 8,MySQL会把单独的

    2.7K10
    领券