实操演练 | 探索数据库中的枚举ENUM(存储、验证、插入和检索)

news/2024/5/17 20:09:21/文章来源:https://blog.csdn.net/weixin_53935287/article/details/127324480

在信息技术领域,俗称 IT 领域,枚举(ENUM)是一种特殊的数据类型,它封装了一组预定义的常量。因此,变量可能只保存枚举的其中一个预定义的值。常见的示例包括指南针方向(東、南、西、北)或星期几。

在数据库表中存储枚举有些复杂因素,其中之一是它们的值可能是数字或字母(即字符串)。而且,你可能希望阻止用户在表中添加任何不属于枚举集的允许值。我们将在今天的文章中解决这两个问题。

探索枚举值

最基本的枚举包含一组从零开始的号值,每个值由一个常量表示,以下是 Java 的例子:

public enum Day {SUNDAY, MONDAY, TUESDAY, WEDNESDAY,THURSDAY, FRIDAY, SATURDAY 
}

更复杂的枚举可能包含其他类型;字符串是最常见的类型,但也支持更复杂的对象。以下是一个用于表示不同环境 URL 的枚举(也是 Java):

public enum Environment 
{PROD("https://prod.domain.com:1088/"), SIT("https://sit.domain.com:2019/"), CIT("https://cit.domain.com:8080/"), DEV("https://dev.domain.com:21323/");private String url;Environment(String envUrl) {this.url = envUrl;}public String getUrl() {return url;}
}

通常,将枚举存储为数字序数值被认为是不好的做法,因为这会使调试和支持变得困难。而存储转换为字符串的实际枚举值通常更可取。为了说明这一点,假设我们有一个纸牌的枚举:

public enum Suit { Spade, Heart, Diamond, Club 
}

现在假设你是一名数据库从业人员,正在试图解读以下两个查询结果:

Name          Suit
------------  ----
John Smith    2
Ian Boyd      1Name          Suit
------------  -------
John Smith    Diamond
Ian Boyd      Heart

我认为你会同意后者更容易解释,因为第一个查询结果需要有源代码并找到分配给每个枚举成员的数值。

尽管存储字符串需要更多的磁盘空间,但枚举成员名称往往很短,而且硬盘价格很便宜,因此值得权衡取舍,让你的日常工作更轻松。

使用数值的另一个问题是它们难以更新。如果不强制使用旧数值,你无法轻松插入或重新排列成员。例如,将 Unknown值添加到 Suit 枚举将需要将其更新为:

public enum Suit { Unknown = 4, Heart = 1, Club = 3, Diamond = 2, Spade = 0 }

…以便保留已经存储在数据库中的旧数值。

验证数据库中的枚举值

现今许多数据库,包括 MySQL 和 SQL Server,都支持 ENUM 数据类型。ENUM 值指定为字符串,為了紧凑存储在存储时会自动编码为数字。

以下是 Navicat for MySQL 中的 MySQL 语句,用于创建表和填充包含衬衫和尺寸数据,以及获取中码衬衫数据的 SELECT 查询:

如果现在尝试插入一个无效的 ENUM 值,我们会得到以下错误:

尽管消息指出该值已被截断,但实际上并未插入数据。

总结

在本文中,我们探讨了如何在数据库中使用枚举值,包括如何存储、验证、插入和检索它们。

有兴趣试用 Navicat for MySQL?你可以免费使用 14 天!

往期回顾

Navicat 被投毒了 | 真相来了!

盗版引发设备瘫痪

Navicat 16 现已支持 OceanBase 社区版

Navicat 成为信通院数据库创新实验室成员

Navicat 学术伙伴计划 - 免费教育版申请

Navicat 技术智库 - 实战演练与各类热门问题解答

免费试用攻略 | Navciat 16 数据库管理工具

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_23651.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

东华大学 2022 oj c++ 无超纲写法 简单易懂 日期

//没有技巧&#xff0c;没有感情 AC代码&#xff1a; #include <stdio.h> #include<iostream> #include<string> #include<bits/stdc.h> using namespace std; int main() { char day[4]; char day1[4] { M,o,n }; char day2[4] { T,u,…

【WPF】Tabcontrol的IsSynchronizedWithCurrentItem属性

如果两个控件都绑定到同一个源(ObservableCollection)集合视图时,该对象会自动绑定到该视图的 CurrentItem。请注意,CollectionViewSource 对象会自动同步货币与所选内容。如果列表控件没有像示例中那样绑定到 CollectionViewSource 对象,则您需要将其 IsSynchronizedWith…

MobileBERT: a Compact Task-Agnostic BERT for Resource-Limited Devices(2020-4-6)

模型介绍 近年来&#xff0c;自然语言处理(NLP)通过使用具有数亿个参数的巨大预训练模型取得了巨大的成功。然而&#xff0c;这些模型受到沉重的模型尺寸和高延迟的影响&#xff0c;因此无法部署到资源有限的移动设备上。因此这里提出了MobileBERT来压缩和加速流行的BERT模型。…

微信小程序中引导用户关注公众号实现方案详细说明

前言 之前讲过如何利用公众号针对指定用户完成业务操作之后实时发送消息.就好比在线医院公众号中看病挂号&#xff0c;挂号预约成功之后微信列表中会新增一条关注的公众号预约成功消息.具体实现步骤可以看下文章如何实现&#xff1a;手把手教你微信公众号如何给指定用户发送消息…

瑞吉外卖06-分页查询

瑞吉外卖06-分页查询 需求分析 问题描述 解决方案 对于createTime、updateTime字段 对于createUser、updateUser字段 代码实现 知识点分析 ThreadLocal 本次功能代码实现&#xff08;免费&#xff09; 瑞吉外卖06-分页查询 需求分析 问题描述 前面我们已经完成了…

嵌入式分享合集76

一、推挽、开漏、OC、OD 与推挽输出相对的是开漏输出&#xff0c;而开漏输出分为OC、OD两种&#xff0c;下文分别详细介绍。 推挽输出 推挽输出&#xff08;Push-Pull Output&#xff09;是由两个MOS或者三极管受到互补控制信号的控制&#xff0c;两个管子始终处在一个导通另一…

解决github分支提交冲突

一、背景 github上fork了base仓库 648540858/wvp-GB28181-pro 到自己仓库&#xff0c;并进行了个性化更改。base仓进行了代码更新&#xff0c;此时我和base仓有了冲突如何解决&#xff1f; 思路&#xff1a;自己仓库的代码合并到主仓是Pull Requests&#xff0c;两个不同仓库or…

PDF怎么转图片?建议收藏这些方法

PDF是我们在传输文件的时候&#xff0c;经常会使用到的一种格式。它可以帮助我们在不同的设备上&#xff0c;打开文件并且不会影响到文件内容的文字结构。而jpg是一种常见的图片格式&#xff0c;有时我们可能会遇到PDF转jpg的情况&#xff0c;那你们知道PDF转jpg怎么转吗&#…

git push 所有分支到新仓库地址

例&#xff1a;从gitee上拉取test-code代码&#xff0c;到自己新仓库地址,test-code仓库有master和test两个分支&#xff1b;具体命令和结果如下 xxxxxxxxopen02:~/src/code/tmp$ git clone gitgitee.com:striver-wy/test-code.git //从gitee下载代码 Cloning into test-code..…

CVPR2022-Rethinking Efficient Lane Detection via Curve Modeling

概述 总结分析了当前&#xff08;图像&#xff09;车道线检测的三类方法&#xff0c;为了解决现有多项式曲线方法的优化困难&#xff0c;提出了使用参数贝塞尔曲线拟合车道线的方案。此外还提出了基于变形卷积的特征翻转融合&#xff0c;以利用驾驶场景中车道的对称特性。 Pape…

Mysql基于binlog日志恢复数据

Mysql基于binlog日志恢复数据 1.Linux安装mysql https://blog.csdn.net/qq_44981526/article/details/126717005 可能遇到的问题 1.net-tools未安装&#xff0c;执行yum install net-tools 2.远程连接工具连接不上mysql grant all privileges on *.* to root% identified…

R语言caret机器学习(四):数据拆分

【R语言数据科学】 🌸个人主页:JOJO数据科学📝个人介绍:统计学top3高校统计学硕士在读💌如果文章对你有帮助,欢迎✌关注、👍点赞、✌收藏、👍订阅专栏✨本文收录于【R语言数据科学】本系列主要介绍R语言在数据科学领域的应用包括: R语言编程基础、R语言可视化、R…

垃圾分类查询管理系统

垃圾分类查询管理系统1.介绍1.1 功能点2.软件架构3.安装启动4.运行截图参考网站&#xff1a;https://lajifenleiapp.com/ 1.介绍 垃圾分类查询管理系统&#xff0c;对不懂的垃圾进行查询进行分类并可以预约上门回收垃圾。 让用户自己分类垃圾&#xff0c; 按国家标准自己分类&…

【最详细最全】Github的jenkins的自动化部署

1>创建项目 2>General 设置 3>配置源码管理 1>勾选Git选项之后&#xff0c;就会出现相关的填写项&#xff0c;根据下图的指引来填写就行了 填写项目的 git 地址, eg&#xff1a; GitHub - Leader755/leader755.github.io: github 博客&#xff08;hexo一键搭建博…

(附源码)计算机毕业设计SSM基于Java的图书馆座位预约系统

&#xff08;附源码&#xff09;计算机毕业设计SSM基于Java的图书馆座位预约系统 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 …

Torch网络结构/训练过程可视化

一、网络结构的可视化 我们训练神经网络时&#xff0c;除了随着step或者epoch观察损失函数的走势&#xff0c;从而建立对目前网络优化的基本认知外&#xff0c;也可以通过一些额外的可视化库来可视化我们的神经网络结构图。这将更加地高效地向读者展现目前的网络结构。 为了可…

ARM接口技术:汇编语言实现1~100的累加,1+2+3+4+...+99+100=?还有汇编语言程序的编译和运行步骤

进入正题&#xff1a; 在终端输入&#xff1a;vi sum.S&#xff0c;建立文件 1、编写代码&#xff1a;定义两个变量&#xff0c;r0、r1 .global _start _start:mov r0,#1mov r1,#0 sum:add r1,r0add r0,#1cmp r0,#100bgt endb sumend:mov r2,r1nopnopnop2、编译建立一个makefi…

客流管控系统可以协助博物馆进行人数管理

进入21世纪&#xff0c;我国的博物馆建设迎来了新的高潮&#xff0c;无论是数量&#xff0c;还是规模&#xff0c;都前所未有。目前&#xff0c;全国的博物馆总数已经达到5 000多座&#xff0c;为了管控博物馆的人数&#xff0c;很多博物馆都安装了客流管控系统。客流管控系统可…

Android 开发学习(一)

文章目录1. Android 安装2. 创建第一个Android项目3. 什么是Gradle&#xff1f;4. 运行第一个Android程序5. Android架构 介绍6. 控件 之 textView(文本)6.1 textView 基础语法6.2 带阴影的textView6.3 跑马灯效果的 textView7. 控件 之 Butto(按钮)7.1 Button 的 基本属性 和 …

电源纹波,有这样几种测试方法,值得收藏

【嵌入式学习资料】V/ X 公/众/号 https://pan.baidu.com/s/1K8_EKVtOaN42IvuFSj8vJA tiquma&#xff1a;6666 纹波测试在电源质量检测中十分重要&#xff0c;虽然看似简单&#xff0c;但却包含诸多细节。这些细节在您测试的时候是否面面俱到&#xff1f;我们又如何把一项简单…