首页 > 数据库 >MySQL中的一些复合数据类型

MySQL中的一些复合数据类型

时间:2023-09-16 23:33:07浏览次数:54  
标签:存储 SET ENUM 数据类型 复合 枚举 固定值 MySQL red

ENUM 枚举类型

ENUM适合于只能在一组固定值中选一个的场景,比如性别只能为男或者女。

ENUM的优势在于:

  • 只能在固定值中选择,可以在数据库层面限制非法值。
  • 数据的存储用数字来存储,占用空间少。

但是它的使用有很多需要我们注意的地方,一不小心就会得到错误的结果。

create table test (name varchar(40), sex enum('male', 'female') );

ENUM类型数据存储的实际值是索引值,如上面的ENUM('male', 'female')的sex字段所有值为:

字面值 存储值
NULL NULL
'' 0
'male' 1
'female' 2

在查询的时候又会将这个编码过的数字转为实际的值。这种存储和查询的方式会导致一些处理数字的函数,也会使用存储的值来进行计算,如SUM()和AVG()。

SET集合类型

SET和ENUM类型非常相似,它适合于只能在一组固定值中选零个或多个的场景,比如一个人喜欢的颜色可以为红、黄、蓝等颜色中的一个或多个,也可以都不喜欢。

SET的优势和ENUM也相似,在于:

  • 只能在固定值中选择,可以在数据库层面限制非法值。
  • 数据的存储用数字来存储,占用空间少。但在枚举值数量很多,而枚举值字符数少时这一可能不成立。
create table test2 (name varchar(40), color set('red', 'green', 'blue', 'yellow'));

SET类型数据存储的实际值是索引值的和,我们所有枚举值都是按照列表中的索引值进行存储的,不同的是通过设置二进制数为1的位置,即2的幂次方。如上面的SET('red', 'blue', 'green', 'yellow')的color字段所有值为:

枚举值 二进制值 十进制数字
red 0001 1
green 0010 2
blue 0100 4
yellow 1000 8

而当有多个值时,通过所有值的求和得到存储的值。因此存储的数据量变少了,当取出的时候编码过的数字又会被转义成实际的字符串。这种存储和查询的方式会导致一些处理数字的函数,也会使用存储的值来进行计算,如SUM()和AVG()。

由于set类型的特殊性,因此有专用的查找函数:

insert into test2(name,color) VALUES('lisi','red,blue');
select * from test2 where find_in_set('red', color);

参考

MySQL的复合数据类型:ENUM和SET

标签:存储,SET,ENUM,数据类型,复合,枚举,固定值,MySQL,red
From: https://www.cnblogs.com/strongmore/p/17343705.html

相关文章

  • Go语言连不上 Mysql
    1.dialtcp127.0.0.1:3306:connect:connectionrefused因为mysql安装时,的配置有一个关闭网络连接,所以连不上文件在/etc/my.cnf.d/mariadb-server.cnf把这信skip-networking注释了即可[mysqld]#skip-networking......
  • MySQL——索引底层
    索引索引是存储引擎用于快速获取数据的一种数据结构,目的是减少磁盘I/O次数,提高数据库性能。索引是在存储引擎中实现的,因此每种存储引擎的索引不一定完全相同。频繁作为查询条件(不包括唯一性太差的字段,如男女)的字段应该创建索引。代价1、额外的磁盘占用2、对表进行DML(增删改)......
  • 【php基础】php连接mysql数据库及基本操作02
    一、php连接mysql数据库<?php$servername="localhost";$username="root";$password="root";$dbname="mysql";//创建连接$conn=newmysqli($servername,$username,$password,$dbname);//检测连接i......
  • 5-MySQL列定义
    1.列定义说明:在MySQL中,列定义(ColumnDefinition)是用于定义数据库表中每一列的结构的语句。它指定了列的名称、数据类型、长度、约束以及其他属性。2.主键和自增主键:PRIMARYKEY是数据库表中的一个字段,被用作主键。主键用于唯一标识表中的每一行/记录。在创建表时,通常会为主键......
  • Canal实现MySQL增量数据的订阅和消费
    介绍canal,译意为水道/管道/沟渠,主要用途是基于MySQL数据库增量日志解析,提供增量数据订阅和消费。canal的工作原理就是把自己伪装成MySQLslave,模拟MySQLslave的交互协议向MySQLMaster发送dump协议,MySQLmater收到canal发送过来的dump请求,开始推送binarylog给canal,然后ca......
  • 4-MySQL数据库的常用操作
    在MySQL数据库中,增删改查操作是指对数据进行添加、删除、查询和修改的操作。这些操作在数据库管理和维护中非常重要,可以帮助数据库管理员和开发人员有效地管理数据和实现各种复杂的数据处理需求。添加数据(增加操作):在MySQL中,添加数据通常使用INSERT语句。通过INSERT语句,开发人员可......
  • 复合索引 multiple-column index Composite Indexes
    MySQL::MySQL8.0ReferenceManual::8.3.6Multiple-ColumnIndexeshttps://dev.mysql.com/doc/refman/8.0/en/multiple-column-indexes.html MySQL::MySQL8.0ReferenceManual::8.2.1.3IndexMergeOptimizationhttps://dev.mysql.com/doc/refman/8.0/en/inde......
  • 初学者一定要了解的c语言数据类型详解来了
    @TOC前言`一、当我们要描述或者记录一些事物时,通常需要用一些数据来反映它的特征,例如:小明"男""19"岁,身高"1.88"米,在从语言中,要表示这些数据就需要设置合适的数据类型,那么c中数据有哪些类型提供给我使用呢?一、数据类型基本类型整形short//短整型int//整形l......
  • 3-MySQL基本数据类型介绍
    数据类型的介绍:数据类型(data_type)是指系统中所允许的数据的类型。数据库中的每个列都应有适当的数据类型,用于限制或允许该列中存储的数据。例如,列中存储的为数字,则相应的数据类型应该为数值类型。如果使用错误的数据类型可能会严重影响应用程序的功能和性能,所以在设计表时,应该特......
  • mysql初始密码是什么
    MySQL初始密码是什么?对于刚开始使用MySQL的用户来说,这是一个常见的问题。实际上,MySQL的初始密码是空的。在使用MySQL之前,我们需要首先创建一个root账户。在Windows系统中,我们可以使用命令行操作mysql,打开cmd命令行窗口,输入mysql-uroot-p,然后按回车键。这时候我们需要输入初始密码......