Enum

简介: Enum

ClickHouse 支持枚举类型,这是一种在定义常量时经常会使用的数据类型。 ClickHouse 提供了 Enum8Enum16 两种枚举类型,他们除了取值范围不同之外,别无二致。枚举固定使用 (String: Int)Key/value 键值对的形式定义数据,所以 Enum8Enum16 分别会对应 (String: Int8)(String: Int16) ,例如:

$ CREATE TABLE Enum_TEST (
  c1 Enum8('read' = 1, 'start' = 2, 'success' = 3, 'error' = 4)
) ENGINE = Memory;点击复制复制失败已复制


在定义枚举集合的时候,有以下几点需要注意:

  1. KeyValue是不允许重复的,要保证唯一性。
  2. KeyValue的值都不能为Null,但Key允许是空字符串。
  3. 在写入枚举数据的时候,只会用到Key字符串部分。


如下所示:

$ INSERT INTO Enum_TEST VALUES ('read');
$ INSERT INTO Enum_TEST VALUES ('start');点击复制复制失败已复制


数据在写入的过程中,会对照枚举集合项的内容逐一检查。如果Key字符串不在集合范围内则会抛出异常,比如执行下面的语句就会出错:

$ INSERT INTO Enum_TEST VALUES('stop');
Exception on client:
Code: 49. DB::Exception: Unknown element 'stop' for type Enum8('read' = 1, 'start' = 2, 'success' = 3, 'error' = 4)点击复制复制失败已复制


提示

Q:枚举类型完全可以使用 String 替代,为什么还需要专门的枚举类型呢? A:这是出于性能的考虑,因为虽然枚举定义中的 Key 属于 String 类型,但是在后续对枚举的所有操作中(包括排序分组去重过滤等),会使用 Int 类型的 Value 值。

目录
相关文章
|
4月前
|
C语言
C enum(枚举)
C enum(枚举)
33 0
|
10天前
|
存储 C语言
C enum(枚举)详解
在C语言中,`enum`(枚举类型)允许用户定义包含命名整数常量的数据类型,提高了代码的可读性和可维护性。通过关键字`enum`定义枚举,如`enum Color {RED, GREEN, BLUE}`。枚举值默认从0开始递增,也可自定义。枚举类型实际上是整型的别名,可用于简化代码并限制变量的具体取值范围。
60 15
|
3月前
|
存储 安全 API
C++一分钟之-C++中的枚举类型(enum class)
【6月更文挑战第25天】C++的`enum class`(强类型枚举)在C++11中引入,增强了枚举的作用域和类型安全,减少命名冲突。它要求使用全名(如`Color::Green`)访问枚举成员,并能显式指定底层类型。常见问题包括默认值非0、隐式转换和范围溢出,解决办法是明确赋值、显式转换和选择合适底层类型。高效技巧包括用于状态机、作为函数参数、创建别名和迭代。掌握这些能提升代码质量。
109 0
|
4月前
|
程序员 C语言
c enum(枚举)
c enum(枚举)
53 1
|
4月前
|
程序员 测试技术 C++
[C++] enum枚举类型用法
[C++] enum枚举类型用法
72 0
|
JavaScript C#
enum:枚举类型
enum:枚举类型
172 0
|
Java C语言 Spring
enum(枚举)
枚举是 C 语言中的一种基本数据类型,它可以让数据更简洁,更易读。
230 0
|
程序员 网络安全 C++
C/C++ enum使用
C/C++ enum使用
205 0
|
安全 C# 存储