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

mysql存储集合的字段

基础概念

MySQL中的集合(Set)是一种数据类型,用于存储一组固定的字符串值。集合中的每个值都是唯一的,且集合中的值是有序的。集合类型通常用于存储一组有限的、互不相同的选项,例如性别、颜色等。

相关优势

  1. 唯一性:集合中的每个值都是唯一的,这有助于确保数据的完整性和一致性。
  2. 有序性:集合中的值是有序的,这使得在查询和排序时更加方便。
  3. 节省空间:相比于使用其他数据类型(如VARCHAR)存储多个值,集合类型可以更有效地利用存储空间。

类型

MySQL中的集合类型主要有两种:

  1. SET:可以存储0到多个值,每个值都是预定义的字符串。SET类型的值是有序的,且每个值都是唯一的。
  2. ENUM:可以存储0到1个值,每个值也是预定义的字符串。ENUM类型的值是有序的,但只能选择一个值。

应用场景

集合类型通常用于存储一组有限的、互不相同的选项。例如:

  • 性别:男、女、未知
  • 颜色:红、绿、蓝、黄
  • 周末活动:运动、阅读、旅行、看电影

示例代码

假设有一个用户表,其中有一个字段表示用户的兴趣爱好,可以使用SET类型来存储:

代码语言:txt
复制
CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(255) NOT NULL,
    hobbies SET('运动', '阅读', '旅行', '看电影') NOT NULL
);

插入数据:

代码语言:txt
复制
INSERT INTO users (name, hobbies) VALUES ('张三', '运动,阅读');
INSERT INTO users (name, hobbies) VALUES ('李四', '旅行,看电影');

查询数据:

代码语言:txt
复制
SELECT * FROM users WHERE hobbies = '运动';

常见问题及解决方法

  1. 插入重复值:
    • 问题:尝试插入集合中已存在的值。
    • 原因:集合中的每个值都是唯一的。
    • 解决方法:确保插入的值在集合中不存在。
  • 插入非法值:
    • 问题:尝试插入集合中未定义的值。
    • 原因:集合类型只能存储预定义的值。
    • 解决方法:确保插入的值在集合的定义范围内。
  • 查询和排序:
    • 问题:如何根据集合中的值进行查询和排序?
    • 解决方法:使用MySQL提供的集合函数和操作符,例如FIND_IN_SET、ORDER BY FIELD等。

参考链接

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

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

相关·内容

MySQL 如何存储长度很长的数据字段

最近,在工作中遇到了MySQL中如何存储长度较长的字段类型问题,于是花了一周多的时间抽空学习了一下,并且记录下来。...MySQL大致的逻辑存储结构在这篇文章中有介绍,做为基本概念:InnoDB 逻辑存储结构 注:文中所指的大数据指的是长度较长的数据字段,包括varchar/varbinay/text/blob。...说了这么多,总结下Compact格式存储大数据的缺点: 由于存在768字节的前缀在Page页,所以会存在能定义一个字段,存储11000字节,但是不能定义11个字段,每个字段存储1000字节的”bug”。...将列放入外部存储页的标准 当一行中的数据不能在数据页中放下,需要申请外部存储页时,MySQL需要决定将哪一列的数据放到外部存储页,遵循的规则如下: 长度固定的字段不会被放到外部存储页(int、char(...当有多个大数据字段满足上面条件,需要被放到外部存储页时,MySQL会优先选择大的字段放到外部存储页,因为这样可以最大限度的省下数据页的空间,使得更多的字段能够被放到数据页。

7.2K20
  • PHP操作MySQL中BLOB字段的方法示例【存储文本与图片】

    本文实例讲述了PHP操作MySQL中BLOB字段的方法。...分享给大家供大家参考,具体如下: 1、M/【参考文章的时候,并不建议直接复制,应该尽量地读懂】/ySQL中BLOB字段类型 BLOB类型的字段用于存储二进制数据。...MySQL中,BLOB是个类型系列,包括:TinyBlob、Blob、MediumBlob、LongBlob,这几个类型之间的唯一区别是在存储文件的最大大小上不同。...MySQL的四种BLOB类型 TinyBlob:  最大 255字节 Blob:      最大 65K MediumBlob:最大 16M LongBlob:  最大 4G 注意:如果你存储的文件过大...($query); echo $result["C/【本文中一些MYSQL版本可能是以前的,MYSQL建议使用5.7以上的版本】/OMPRESS_CONTENT"]; ?

    4.9K30

    数据表多字段存储值与单字段存储json值的区别

    使用场景 电商系统中商品参数数据,假设包括以下几项 品牌 产地 尺寸 生产日期 保质期 重量 在设计数据表结构的时候,可以选择2种方式 第1种是分别创建不同的字段存储对应的参数值 第2种是建立一个字段用于存储参数的...多字段存储数据的优点 1、查询性能:当需要经常对数据库中的特定字段进行查询、排序或过滤时,使用多个字段通常能提供更好的性能。也可以利用索引来加速这些操作。...多字段存储数据的缺点 1、灵活性:如果数据结构经常变化,可能需要频繁地修改数据库表结构,可能会涉及复杂的迁移过程。 2、空间效率:对于包含大量空值或重复值的字段,可能不如JSON存储方式节省空间。...单字段存储JSON值的优点 1、灵活性:可以轻松地存储和查询非结构化或半结构化数据,无需事先定义所有可能的字段。当数据结构发生变化时,不需要修改数据库表结构。...在 Mysql 的高版本中已提供了对JSON的原生支持,包括索引、查询优化等功能,这能一定程序上减轻使用JSON字段时可能遇到的一些性能问题,但其它方面的缺点仍有待解决。

    2.6K31

    MySQL-存储引擎-创建表-字段数据类型-严格模式-字段约束-键-02

    枚举 enum 集合 set 案例 约束条件 常见约束 primary key 主键 主键 -- 单字段 primary key 联合主键 primary key(字段1, 字段2...)...常见几个存储引擎 InnoDB MySQL 5.5 开始 默认存储引变更为 InnoDB 默认的存储引擎,支持事务,支持行锁,表锁,外键,比较安全 因为 InnoDB 在存储数据的时候,更加安全,...建表只会建一个文件: frm表结构,数据不存储 感兴趣的小伙伴可以点这个链接了解一下:MySQL的BlackHole引擎在主从架构中的作用 引擎对应的本地化文件 ?...char 类型字段的时候,硬盘上确确实实存的是固定长度的数据,但是再取出来的那一瞬间mysql 会自动将填充的空格去除 ?...的5种时间类型的比较 枚举与集合 枚举 enum 限制某个字典能够存储的数据内容只能是指定的几个中的一个(多选一) 集合 set 限制某个字段能够存储的数据内容只能是指定的内容中的某几个(多选多) 以字符串的形式传入多个值

    3.2K30

    MySQL中的json字段

    // MySQL中的json字段 // MySQL5.7.8中引入了json字段,这种类型的字段使用的频率比较低,但是在实际操作中,有些业务仍然在用,我们以此为例,介绍下json字段的操作方法...,info是json字段,插入了三条数据,如上: mysql> select * from test1 where json_extract(info,"$.age")>=30; +------+---...其中: 1、$符号代表的是json的根目录, 2、我们使用$.age相当于取出来了json中的age字段, 3、当然,在函数最前面,应该写上字段名字info 下面来看json中常用的函数: a、json_valid...判断是否是json字段,如果是,返回1,如果不是,返回0 mysql> select json_valid(2); +---------------+ | json_valid(2) | +------...,如果传入了字符串2,那么,返回结果是1 b、json_keys传回执行json字段最上一层的key值 mysql> select json_keys('{"name":"yeyz","score":100

    12.4K20

    MySQL修改表的字段

    MySQL修改表的字段 MySQL 修改表字段的方法有两种: ALTER TABLE MODIFY COLUMN。...其语法如下: ALTER TABLE 表名 MODIFY COLUMN 字段名 字段类型; 其中,表名 表示要修改的表名,字段名 表示要修改的字段名,字段类型 表示修改后的字段类型。...其语法如下: ALTER TABLE 表名 MODIFY COLUMN 字段名 字段类型 [属性]; 其中,表名 表示要修改的表名,字段名 表示要修改的字段名,字段类型 表示修改后的字段类型,属性 表示修改后的字段属性...0; 需要注意的是,如果修改表字段的数据类型或长度,可能会造成数据丢失或者修改失败。...因此,在进行字段类型的修改时,需要先备份数据,避免出现意外情况。

    9.8K10

    Mysql Explain的主要字段

    当联合主键或唯一索引的所有字段跟常量值比较时,join类型为const。其他数据库也叫做唯一索引扫描 3、eq_ref 多表join时,对于来自前面表的每一行,在当前表中只能找到一行。...这可能是除了system和const之外最好的类型。 当主键或唯一非NULL索引的所有字段都被用作join联接时会使用此类型。 eq_r ef可用于使用’='操作符作比较的索引列。...比较的值可以是常量,也可以是使用在此表之前读取的表的列的表达式。 相对于下面的ref区别就是它使用的唯一索引,即主键或唯一索引,而ref使用的是非唯一索引或者普通索引。...要注意,全文索引的优先级很高,若全文索引和普通索引同时存在时,mysql不管代价,优先选择使用全文索引 6、ref_or_null 跟ref类型类似,只是增加了null值的比较。实际用的不多。...Extra 字段显示, 常见的有以下几种内容: distinct:在select部分使用了distinc关键字 Using filesort:当 Extra 中有 Using filesort

    2.2K20

    MySQL 字段操作

    看完本文,你能够优雅地设计一张有意义的表; 一、字段操作 1.添加字段 (add) alter table add 字段名 数据类型; desc ; 2.修改字段数据类型 (modify...) alter table modify 字段名> ; 3.字段重命名 (change) #新字段名后要加上字段的数据类型,否则报错 alter table change...,用于保证数据的完整性,从而符合该字段达到我们期望的效果,如果插入的数据不满足约束要求,数据库管理系统就会拒绝执行SQL 操作 常见的约束有 约束条件 含义 NOT NULL 约束字段值不能为空 DEFAULT...约束字段默认值 UNIQUE KEY 约束字段的值唯一 PRIMARY KEY 约束字段为主键,唯一标识 AUTO_INCREMENT 字段值自动增加 1....主键约束(primary key) 主键约束的字段不能为空,不能重复 #创建表的时候,添加主键; CREATE TABLE (字段名 数据类型 PRIMARY KEY); 复合主键: 由多个字段组成的主键

    14.3K30

    MySQL字段的知识科普

    为什么varchar默认长度是255 1、 mysql要求varchar一个行的定义长度不能超过65535bytes,这个大小包括了字段占用的空间在内,text和blob等大字段除外(注: 单行最大限制指的就是一张表中所有字段的所设置的长度总和不得超过...65535字节) 2、 InnoDB存储引擎的表索引的前缀长度最长是: 767字节,如果需要创建索引,不能超过这个长度。...、总结: varchar(255)不是最优的字符长度,最优的需要按照具体情况来,但是这个长度可以保证你能少出错的一个不错的默认值 int(20)中20的表示什么意思 1、是指显示字符的长度。...20表示最大显示宽度为20,但仍占4字节存储,存储范围不变; 2、不影响内部存储,只是影响带 zerofill 定义的 int 时,前面补多少个 0,易于报表展示 3、对大多数应用没有意义,只是规定一些工具用来显示字符的个数...;int(1)和int(20)存储和计算均一样 额外科普   数据库的删除指令中,Drop、Truncate、Delete的区别在哪里?

    1.5K10

    Mysql 字段常用字段类型

    受到时区影响,如果数据库存储的是起始时间,那么就会导致结果少于1970年,就会报错!...字符串类型 char 与 varchar 区别 内存占用: (不同编码格式,占用字节数不同,我们就新定义一个字符位,表述字符占用的位数,毕竟内存占用 总空间 =位数 x 此编码格式每字符所占用的字节数)...char是定长,如果你长度定位4,你填写"a" 其他3位填充空字符,也是占用4个字符位 varchar是"a" 会使用2个字符位,浪费一个字符位存储长度,如果"aa" 就会用3个字符位...特殊说明: 解决问题的光鲜,藏着磕Bug的痛苦。...以上文章,均是我实际操作,写出来的笔记资料,不会出现全文盗用别人文章!烦请各位,请勿直接盗用!

    11.7K30

    【MySQL】MySQL的存储引擎

    不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能。现在 许多不同的数据库管理系统都支持多种不同的数据引擎。MySQL的核心就是存储引擎。...用户可以 根据不同的需求为数据表选择不同的存储引擎 可以使用 SHOW ENGINES 命令 可以查看Mysql的 所有执行引擎我们 可以到 默认的执行引擎是innoDB 支持事务,行级锁定和外键。...拥有较高的插入,查询速度,但不支持事 务 InnoDB:事务型速记的首选引擎,支持ACID事务,支持行级锁定,MySQL5.5成为默认数据库引 擎 Memory: 所有数据置于内存的存储引擎,拥有极高的插入...但是会占用和数据 量成正比的内存空间。并且其内容会在MYSQL重新启动是会丢失。 Archive :非常适合存储大量的独立的,作为历史记录的数据。因为它们不经常被读取。...关闭mysql服务 2. 找到mysql安装目录下的my.ini文件: 3.

    6.9K20

    mysql 字段时间类型的比较

    字段的时间类型分为: ,,,,; 下面就分别介绍这几种时间类型的区别 每个时间类型都有一个有效范围和一个零值,当指定的类型的值超过有效范围时,就会使用零值 YEAR 该类型表示年,格式为 有三种表示方法...:分:秒,尽管时间范围为0~23,但是为了表示某些特殊的时间,mysql将小时的范围扩大了,并且支持负值。....我们可以通过获取当前的值 DATE 该类型表示年-月-日,标准格式为,但是中还支持一些不严谨的格式:比如等其他的符号来分割 在插入数据的数据的也可以使用 年份的转换和上面的类型的规则一样的 可以使用...函数获取当前的值 DATETIME 该类型表示YYYY-MM-DD hh:mm:ss,可以看出和类型的结合体.所以赋值的规则时和上面和的时一样的 TIMESTAMP 该类型表示为YYYY-MM DD hh...哈哈,到年后就别用这个类型了 这只是一个简单的区分说明,具体时间类型的说明 请参考 官方文档 https://dev.mysql.com/doc/refman/5.7/en/date-and-time-types.html

    6.4K80

    MySQL字段类型的详细解释

    由MySQL支持的列类型列在下面。下列代码字母用于描述中:M指出最大的显示尺寸。最大的合法的显示尺寸是 255 。 D适用于浮点类型并且指出跟随在十进制小数点后的数码的数量。...行为如同一个CHAR列:“未压缩”意味着数字作为一个字符串被存储,值的每一位使用一个字符。 小数点,并且对于负数,“-”符号不在M中计算。 如果D是0,值将没有小数点或小数部分。...(YEAR类型在MySQL3.22中是新类型。) CHAR(M) [BINARY] 一个定长字符串,当存储时,总是是用空格填满右边到指定的长度。 M的范围是1 ~ 255个字符。...注意:当值被存储时,尾部的空格被删除(这不同于ANSI SQL规范)。 M的范围是1 ~ 255个字符。...一个集合。能有零个或多个值的一个字符串对象,其中每一个必须从值列表'value1', 'value2', ...选出。 一个SET最多能有64个成员。

    2.9K90

    innodb数据字段的物理存储结构

    测试版本范围5.0 --> 8.0,主键非叶子节点均存在null bitmask.测试验证过程Mysql安装过程就不写了, 需要注意的是要在配置文件加上innodb_file_per_table=1,....varsize: 对于变长字段(varchar,text,部分char)需要使用1-2字节来记录数据的实际存储长度....若字段最大字节超过255, 则使用1-2字节(看第一字节是否达到128); 若字段最大字节不超过255, 则使用1字节存储即可.null bitmask: 有些字段是没有非空约束的, 即可为空, 那么就需要使用...(pk) the rest of field: 记录剩下的字段信息, 如果是主键是前缀索引,这里还记录完整的主键值.总结mysql的叶子节点和非叶子节点, 主键索引和非主键索引均会记录null bitmask...测试发现是记录的剩余字段的.但由于非叶子节点不存储剩余字段信息,所以这个null bitmask也就一直是0. (虽然一直是0,但也得记录).

    41420
    领券