首页
学习
活动
专区
圈层
工具
发布

mysql对应java的enum

基础概念

MySQL中的枚举(ENUM)是一种数据类型,用于定义一个列可以拥有的固定值集合。每个枚举值都是一个字符串,且在定义时必须唯一。Java中的枚举(Enum)是一种特殊的类,用于定义一组固定的常量。

相关优势

MySQL ENUM:

  • 存储效率:枚举类型在数据库中以整数形式存储,节省空间。
  • 数据完整性:通过预定义的值集合,确保数据的准确性和一致性。

Java Enum:

  • 类型安全:枚举提供了编译时类型检查,减少运行时错误。
  • 代码清晰:枚举使代码更具可读性和可维护性。
  • 方法支持:枚举可以包含方法和构造函数,提供更丰富的功能。

类型

MySQL ENUM:

代码语言:txt
复制
CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    role ENUM('ADMIN', 'USER', 'GUEST')
);

Java Enum:

代码语言:txt
复制
public enum Role {
    ADMIN,
    USER,
    GUEST;
}

应用场景

MySQL ENUM:

  • 用户角色管理:如上述示例中的role字段。
  • 状态管理:如订单状态(待支付、已支付、已取消等)。

Java Enum:

  • 表示一组固定的常量,如星期、月份、颜色等。
  • 在业务逻辑中使用,如用户角色权限控制。

遇到的问题及解决方法

问题1:MySQL ENUM值修改 原因:枚举值在定义后不能直接修改,需要重新创建表或列。 解决方法

  1. 添加新列并设置默认值。
  2. 将数据从旧列复制到新列。
  3. 删除旧列并重命名新列。
代码语言:txt
复制
ALTER TABLE users ADD COLUMN role_new ENUM('ADMIN', 'USER', 'GUEST', 'MODERATOR') DEFAULT 'USER';
UPDATE users SET role_new = role;
ALTER TABLE users DROP COLUMN role;
ALTER TABLE users RENAME COLUMN role_new TO role;

问题2:Java Enum扩展 原因:枚举值在定义后不能添加新的常量。 解决方法

  • 使用接口或抽象类来扩展枚举功能。
  • 创建一个新的枚举类型并继承原有枚举。
代码语言:txt
复制
public interface RoleInterface {
    String getName();
}

public enum Role implements RoleInterface {
    ADMIN("ADMIN"),
    USER("USER"),
    GUEST("GUEST");

    private String name;

    Role(String name) {
        this.name = name;
    }

    @Override
    public String getName() {
        return name;
    }
}

参考链接

希望这些信息对你有所帮助!如果有更多问题,请随时提问。

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

相关·内容

Elasticsearch对应MySQL的对应关系

对应关系表 根据表格对应,来理解Elasticsearch Elasticsearch MySQL 索引库(indices) Database 数据库 类型(type) Table 数据表 文档(Document...) Row 行 域字段(Field) Columns 列 映射配置(mappings) 每个列的约束(类型、长度) 对Elasticsearch相关概念说明 概念 说明 索引库(indices) indices...是index的复数,代表许多的索引 类型(type) 类型是模拟mysql中的table概念,一个索引库下可以有不同类型的索引(目前6.X以后的版本只能有一个类型),类似数据库中的表概念。...数据库表中有表结构,也就是表中每个字段的约束信息;索引库的类型中对应表结构的叫做映射(mapping),用来定义每个字段的约束。 文档(document) 存入索引库原始的数据。...比如每一条商品信息,就是一个文档 字段(field) 文档中的属性 映射配置(mappings) 字段的数据类型、属性、是否索引、是否存储等特性

1.9K10
  • Java中的枚举Enum

    在Java没有提供枚举的时候,比如我们要使用一个表示周几的枚举值怎么办? Java中是这样解决的:定义一个私有的构造函数,然后在类中new出对象来。...public enum Date { Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday; } 如果我要定义这样一个枚举类,让它能够返回对应日期的中文怎么办...中枚举的总结: 1.枚举也是一种特殊形式的Java类 2.枚举类中声明的每一个枚举值代表枚举类的一个实例对象 3.与Java中普通类一样,在声明枚举类时,也可以声明属性、方法构造函数,但枚举类的构造函数必须为私有的...4.枚举类也可以实现接口,或继承抽象类 5.若枚举只有一个枚举值,则可以当做单态设计模式使用 最后需要明确的是: Java中声明枚举类,均是java.lang.Enum类的子类,它继承了Enum...具体方法可以参考Java API文档,里面提供了一些有用的方法。

    1.9K20

    Java Enum Singleton

    参考链接: Java Singleton 今天回头看了单例模式,以前从没用过枚举单例,学习了一下,Enum Singleton 是目前最优的单例模式,好处有三:  1....默认枚举实例的创建是线程安全的,但是在枚举中的其他任何方法由程序员自己负责。   .../** * Singleton pattern example using Java Enumj */ public enum EasySingleton{     INSTANCE; }  你可以通过...枚举自己处理序列化   传统单例存在的另外一个问题是一旦你实现了序列化接口,那么它们不再保持单例了,因为readObject()方法一直返回一个新的对象就像java的构造方法一样,你可以通过使用readResolve...Administrator  *  */ public enum EnumSingleton {     INSTANCE;     /**      * 私有构造方法      */

    1.2K30

    Java enum的用法详解

    完整代码示例如下: package com.merryyou.enmu; import java.util.EnumMap; import java.util.EnumSet; /** * Created...(java是单继承,它已经继承了Enum),可以添加其他方法,覆盖它本身的方法 switch()参数可以使用enum了 values()方法是编译器插入到enum定义中的static方法,所以,当你将enum...enum中的元素,在一个接口的内部,创建实现该接口的枚举,以此将元素进行分组。...enum要求其成员都是唯一的,但是enum中不能删除添加元素。 EnumMap的key是enum,value是任何其他Object对象。 enum允许程序员为eunm实例编写方法。...所以可以为每个enum实例赋予各自不同的行为。 使用enum的职责链(Chain of Responsibility) .这个关系到设计模式的职责链模式。以多种不同的方法来解决一个问题。

    1.1K50

    Java--Enum的思考

    ---- 枚举类是Java5引进的特性,其目的是替换int枚举模式或者String枚举模式,使得语义更加清晰,另外也解决了行为和枚举绑定的问题. int枚举模式 在枚举类之前该模式被广泛使用,如果是int...Java作为强类型语言,该模式让其失去了强类型优势....如何与行为绑定 从反编译的代码来看枚举类是可以实现接口的,那么就可以利用接口定义行为,然后枚举类中覆盖行为.同样假设每一个枚举字段所对应的行为不同,那么直接内部覆盖掉也是很好的策略,这种情况下也叫策略枚举模式...大概意思是枚举类的序列化依靠的是name字段,序列化时转成对应的name输出,反序列化时再依靠valueOf()方法得到对应的枚举字段,从而保证了单例....使用建议 关于使用建议,参考阿里巴巴Java开发手册中的三条建议,以及笔者的一条建议 所有的枚举类型字段必须要有注释,说明每个数据项的用途。

    1.3K40

    java枚举类型enum的使用

    最近跟同事讨论问题的时候,突然同事提到我们为什么java 中定义的常量值不采用enmu 枚举类型,而采用public final static 类型来定义呢?...Java 中的枚举类型采用关键字enum 来定义,从jdk1.5才有的新类型,所有的枚举类型都是继承自Enum 类型。...首先给Light 枚举类型增加构造方法,然后每个枚举类型的值通过构造函数传入对应的参数,同时覆写toString 方法,在该方法中返回从构造函数中传入的参数,改造后的代码如下: public enum...: package com.csdn.myEnum; import java.util.EnumMap; import java.util.EnumSet; public class LightTest...可以创建一个enum 类,把它看做一个普通的类。除了它不能继承其他类了。(java 是单继承,它已经继承了Enum), 可以添加其他方法,覆盖它本身的方法 3.

    1.9K100

    JAVA枚举类型(Enum)的使用

    这个时候就体现出枚举类的作用了,java中枚举类型就是针对这样的场景需求所设计的。.../** * 枚举类的后缀建议为Enum,枚举类型的实例对象建议全大写(这样做符合JAVA的规范) */ public enum SeasonEnum{ SPRING,SUMMER,AUTUMN...那么就让我们更进一步来看看枚举类的作用,针对上面的例子,如果我们在很多场景下都要通过SeasonEnum的实例对象获取相对应的中文,每次都使用switch语句就显得代码冗余。...其实枚举类型可以看做我们平时新建.java差不多,只是枚举类限制了此类的实例对象。当然,枚举类可以有自己的成员变量和方法。...如果想看它更多用法请参考下面的链接 更多用法请参考这篇Java 枚举(enum) 详解7种常见的用法_请叫我大师兄_的博客-CSDN博客_java 枚举的定义与用法 版权声明:本文内容由互联网用户自发贡献

    2.2K20

    Java 枚举类型 enum

    以下使用 JDK 版本为:1.8.0_121 枚举类型的引入 枚举类型是 Java 5 中增加的一个小特性,在此之前,实现枚举的方式为定义编译期常量形式。...枚举类型的使用 enum 关键字与常用的 class 关键字作用相似,用于完成对类结构的定义,所以 enum 可以作为一种特殊的类定义方式理解。...定义过程与 class 的定义类过程基本相同,同样提供有属性和方法的定义,不同之处在于 enum 定义的类默认继承了 Enum 类,因为 Java 不允许多继承,所以使用 enum 定义的类不能再继承其它类...valueOf 与 values 函数 从上图中的反编译内容可以发现两个额外的方法定义,其中 valueOf 函数在 Enum 源码中已有定义,但是比较 Enum 源码中的 valueOf 函数与此处反编译生成的...引用: Java Enums Tutorial A Guide to Java Enums

    1.7K32

    Java 枚举类型enum 的使用

    Java 枚举类型enum 的使用 最近跟同事讨论问题的时候,突然同事提到我们为什么java 中定义的常量值不采用enmu 枚举类型,而采用public final static 类型来定义呢?...Java 中的枚举类型采用关键字enum 来定义,从jdk1.5才有的新类型,所有的枚举类型都是继承自Enum 类型。...首先给Light 枚举类型增加构造方法,然后每个枚举类型的值通过构造函数传入对应的参数,同时覆写toString 方法,在该方法中返回从构造函数中传入的参数,改造后的代码如下: public enum...: package com.csdn.myEnum; import java.util.EnumMap; import java.util.EnumSet; public class LightTest...可以创建一个enum 类,把它看做一个普通的类。除了它不能继承其他类了。(java 是单继承,它已经继承了Enum), 可以添加其他方法,覆盖它本身的方法 3.

    1.9K91

    要慎用mysql的enum字段的原因

    PHP低级编程的兄弟是这样来看这个问题的,我作下笔录如下,期望能客观的理解这个enum字段的优点及缺点: 膘哥观点:     enum有优点。但个人觉得。。。...缺点更多,客观的讲:优点主要是在建数据 库的时候就可以把一些值给规范好。缺点是。。enum不适合PHP。...,这是PHP和 mysql 在使用enum 最大的问题。所以。。安心点啦。干脆点直接tinyint。...规劝: 1)enum是整型这样的错误很容易发生,尤其是php弱类型的,一般新来一个人,没注意enum类型,就会犯错。...这种字段的重复内容过多的,索引建不建,关系不大,这种在mysql叫索引的势太低,其查询效果不太好 https://www.cnblogs.com/-mrl/p/5096447.html 发布者:全栈程序员栈长

    1K20

    java中enum 实现接口

    java中enum 实现接口为什么会有这篇文章呢?日常生活中遇到了一个问题。听我慢慢说来场景我在组件中封装了一个BaseResultEnum;用来定义返回的错误码和错误信息。...但是再返回的时候,必须xxxResultEnum.code,xxxResultEnum.msg 2个参数进行传递进来。因为枚举不能继承。实现有一天忽然发现可以枚举可以实现接口。...上层定义一个统一的接口不就好了public interface IResultCode {/** * 返回码 * * @return Integer */Integer getCode();/** *...返回消息 * * @return String */String getMsg();}枚举类@Getter@AllArgsConstructorpublic enum BaseResultEnum implements...业务内就自己定义自己项目内的错误信息就可以@Getter@AllArgsConstructorpublic enum LearningResultEnum implements IResultCode

    72800

    MySQL中ENUM类型学习--MySql语法

    · 如果将ENUM列声明为允许NULL,NULL值则为该列的一个有效值,并且 默认值为NULL。如果ENUM列被声明为NOT NULL,其默认值为允许的值列的第1个元素。...这说明你可以使用下面的SELECT语句来找出分配了非法ENUM值的行: · mysql> SELECT * FROM tbl_name WHERE enum_col=0;...当创建表时,ENUM成员值的尾部空格将自动被删除。 当检索时,保存在ENUM列的值使用列定义中所使用的大小写来显示。请注意可以为ENUM列分配字符集和 校对规则。...例如,你可以这样从ENUM列搜索数值值: mysql> SELECT enum_col+0 FROM tbl_name; 如果将一个数字保存到ENUM列,数字被视为索引,并且保存的值是该索引对应的枚举成员...如果你想要确定一个ENUM列的所有可能的值,使用SHOW COLUMNS FROM tbl_name LIKE enum_col,并解析输出中第2列的ENUM定义。

    2.4K20

    Java获取Enum所有值

    标题: Java获取Enum所有值 引言: 在Java中,枚举类型(Enum)是一种特殊的数据类型,用于定义一组常量。当我们需要获取一个Enum中所有的值时,有几种不同的方法可以实现。...本文将介绍使用Java代码高效地获取Enum所有值的方法,并提供相应的案例分析。...代码高性能: 在获取Enum所有值的过程中,我们可以使用Java内置的方法来实现。首先,我们需要使用Java的反射机制获取到Enum类型的所有常量。...通过这种方式,我们可以高效地获取到Enum中所有的值,并对它们进行进一步的处理。 结论: 在本文中,介绍了一种在Java中高效获取Enum所有值的方法。...希望本文能够帮助你更好地理解如何获取Java中Enum的所有值,并在实际开发中应用这种方法。对于更多关于Enum的用法和技巧,你可以进一步深入学习和探索。

    53410
    领券