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

mysql用set添加数据类型

基础概念

MySQL是一种关系型数据库管理系统,它使用结构化查询语言(SQL)来管理数据。在MySQL中,SET是一种数据类型,用于存储一组预定义的值。每个值都是唯一的,并且可以有多个值。SET类型的列在数据库中以一种紧凑的格式存储这些值,从而节省空间。

相关优势

  1. 空间效率SET类型在存储多个值时比使用多个单独的列或VARCHAR类型更节省空间。
  2. 数据完整性:通过预定义的值集合,可以确保数据的有效性和一致性。
  3. 查询效率:对于某些查询操作,SET类型可能比其他类型更快,因为它可以直接在二进制格式上进行比较。

类型

MySQL中的SET类型没有特定的“类型”,而是根据你定义的值的数量和名称来创建。例如:

代码语言:txt
复制
CREATE TABLE example (
    id INT AUTO_INCREMENT PRIMARY KEY,
    hobbies SET('reading', 'sports', 'music', 'travel')
);

在这个例子中,hobbies列是一个SET类型,它只能包含预定义的四个值中的一个或多个。

应用场景

SET类型通常用于表示一组有限的选项,例如用户的兴趣爱好、产品的类别、订单的状态等。

示例代码

以下是一个使用SET类型的简单示例:

代码语言:txt
复制
-- 创建表
CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100),
    gender ENUM('male', 'female', 'other'),
    hobbies SET('reading', 'sports', 'music', 'travel')
);

-- 插入数据
INSERT INTO users (name, gender, hobbies) VALUES
('Alice', 'female', 'reading,sports'),
('Bob', 'male', 'music'),
('Charlie', 'other', 'travel');

-- 查询数据
SELECT * FROM users;

可能遇到的问题及解决方法

问题:插入无效的值

如果你尝试插入不在预定义集合中的值,MySQL将插入一个空字符串。

解决方法:在插入数据之前,确保值在预定义的集合中。

代码语言:txt
复制
-- 错误的插入
INSERT INTO users (name, gender, hobbies) VALUES ('Dave', 'male', 'painting'); -- 'painting' 不在集合中

-- 正确的插入
INSERT INTO users (name, gender, hobbies) VALUES ('Dave', 'male', 'reading'); -- 'reading' 在集合中

问题:查询特定值

如果你想查询具有特定SET值的行,可以使用FIND_IN_SET函数。

代码语言:txt
复制
-- 查询喜欢阅读的用户
SELECT * FROM users WHERE FIND_IN_SET('reading', hobbies);

参考链接

通过以上信息,你应该对MySQL中的SET数据类型有了全面的了解,并知道如何在实际应用中使用它。

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

相关·内容

④【Set】Redis常用数据类型: Set

操作命令汇总 Redis的Set是String类型的无序不可重复集合,集合对象的编码可以是intset或者hashtable Redis中Set集合是通过哈希表实现的,添加、删除、查找的复杂度都是O(1...) 集合中最多存放2^32-1个元素 1. sadd 向集合添加一个或多个成员 sadd key member [member ...] # 向集合添加单个成员 sadd set1 m1 # 向集合添加多个成员...sadd set1 m2 m3 # 返回值是操作成功的个数 2. smembers 遍历集合中所有成员 smembers key # 遍历set1中的所有元素 smembers set1 3. sismember...判断集合中是否存在指定的成员 sismember key member # 判断指定成员是否存在于集合set1 # 1:yes # 0:no sismember set1 m1 sismember set1...移动到set2 smove set1 set2 888 9. sdiff 集合成员的差集运算 sdiff key [key ...] # 返回 属于集合s1 但不属于集合s2的成员 sdiff s1

60710

【mysql】SET类型

SET类型 SET表示一个字符串对象,可以包含0个或多个成员,但成员个数的上限为64。设置字段值时,可以取 取值范围内的 0 个或多个值。...'), ('A,B'); SELECT * FROM test_set; [在这里插入图片描述] 插入重复的SET类型成员时,MySQL会自动删除重复的成员#插入重复的SET类型成员时,MySQL会自动删除重复的成员...INSERT INTO test_set (s) VALUES ('A,B,C,A');[在这里插入图片描述] 向SET类型的字段插入SET成员中不存在的值时,MySQL会抛出错误。...#向SET类型的字段插入SET成员中不存在的值时,MySQL会抛出错误。...for column 'gender' at row 1 INSERT INTO temp_mul VALUES('兮动人','睡觉,写代码');#失败[在这里插入图片描述] 只有符合类型的要求时才会添加成功

2.5K30
  • Python数据类型(集合-Set)_006

    集合-Set保存不重复的元素,即集合中的元素都是唯一的,互不相同同一集合中,只能存储不可变的数据类型,包括整形、浮点型、字符串、元组,无法存储列表、字典、集合这些可变的数据类型,否则 Python 解释器会抛出...三、增加元素1、add()方法语法setname.add(element)参数说明:setname 表示要添加元素的集合element 表示要添加的元素内容注:使用 add() 方法添加的元素:只能是数字...、字符串、元组或者布尔类型(True 和 False)值,不能添加列表、字典、集合这类可变的数据,否则 Python 解释器会报 TypeError 错误举例set8 = {1, 2, 3, 'a',....add()向 set1 集合中添加数字、字符串、元组或者布尔类型>>> set1 = {1,2,3}>>> set1.add((1,2))>>> set1{(1, 2), 1, 2, 3}clear(...= {3,4}>>> set3=set1.union(set2)>>> set3{1, 2, 3, 4}update()set1.update(elem)添加列表或集合中的元素到 set1>>> set1

    52410

    Python之集合set添加元素

    参考链接: Python集合set set基本概念  set,中文称为集合,Python内置集合类型,集合中的元素特点:  1、无序:与插入元素的顺序无关  2、无重复:没有重复的元素存在  3、可哈希对象...:每个元素都是可哈希对象  备注:set集合对象本身是不可哈希的对象,因为特殊变量__hash__已经被赋值为None,所以集合set不能作为字典dict的key对象,key对象必须是可哈希的! ...本文代码上下文  girlSet = {"tyson", "taylor", "tom" , "jack", "jerry"} 第一种方式:add()方法  girlSet.add(100) #第一种方式,添加一个元素到...Set中 第二种方式:update()方法  girlSet.update({"jay","bush","kobe"}) update()方法传入的参数必须是可迭代对象(可用于添加一个元素、或者多个元素

    1.9K20

    【Sorted Set】Redis常用数据类型: ZSet

    领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~ 个人主页:.29.的博客 学习社区:进去逛一逛~ ⑤Redis Zset 操作命令汇总 Zset和set...ZSet集合是通过哈希表实现的,添加、删除、查找的复杂度都是O(1) 。 每个元素都会关联一个double类型的分数,以此为集合成员进行由小到大的排序 。...快速理解: Zset就是在set的基础上,每个值前加一个分数值 之前set是k1 v1 v2 现Zset是k1 score1 v1 score2 v2 1. zadd 添加或更新一个或多个成员...zrem 移除有序集合中一个或多个成员 zrem key member [member ...] # 移除有序集合z1中指定的成员 zrem z1 a b 8. zincrby 为指定成员的分数值添加增量...zincrby key increment member # 为有序集合Z1成员c的分数值添加增量36,返回运算后的分数值 zrem z1 a b 9. zcount 获取指定分数范围内的成员数量

    72510

    Redis数据类型之Set集合类型

    Set类型 1.2.1. 简介 Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。...Redis 中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。 集合中最大的成员数为 2次方32 - 1 (4294967295, 每个集合可存储40多亿个成员)。...类似于JAVA中的 Hashtable集合 redis的集合对象set的底层存储结构特别神奇,底层使用了intset和hashtable两种数据结构存储的,intset我们可以理解为数组,hashtable...就是普通的哈希表(key为set的值,value为null)。...命令 赋值语法: SADD key member1 [member2] 向集合添加一个或多个成员 ? 取值语法: SCARD key 获取集合的成员数 ?

    71020

    Redis的各种数据类型实践-Set

    Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。 Redis 中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。...destination中 应用场景 1、抽奖程序 想必大家都用过微信里的抽奖小程序吧,如下图,我们可以点击立即参与进行抽奖,还可以查看所有参与人员,最后就是开奖的功能,一共三个关键点 我们看一下这三个关键点用set...数据类型怎么实现: 1) 点击参与抽奖,则将用户id用户加入集合 SADD key {userlD} 2)查看参与抽奖所有用户 SMEMBERS key 3)抽取count名中奖者 SRANDMEMBER...,并且每人只能得一种,则可以用SPOP key count ?...例如,现有集合set1,set12,set3,元素如下: set1:{a,b,c} set2:{a,c,e} set3:{c,d,f} 对集合进行交、并、差的运算 SINTER set1 set2

    64510

    第八讲:Python 数据类型之Set

    1 什么是Set? 在Python中,Set 是一个无序的不重复元素序列。...set1={“hello”, “good”, “better”, “best”} #用{}来创建Set set2=set() #用Set() 函数创建一个空Set set3=set((“tony”,”tom...”,44,55,66,”jim”)) #用Set()函数创建一个有元素的Set test1=set(“abc”) test2=set(“abcxyz”) 备注: 注意set(“abc”) 里面的引号要用全角的...add() 表示为集合添加元素 update() 表示为集合添加元素 remove() 表示移除指定元素,如果移除的元素不存在就会报错 discard() 表示移除指定元素,如果移除的元素不存在不会报错...总结:今天这篇文章主要讲了Python中的Set 集合这种数据类型的定义,运算符及常用的内置函数,大家多加练习,这是基本功,在后面的课程中,都会使用到。

    62110

    mysql find_in_set学习

    FIND_IN_SET 是 MySQL 中的一个内置函数,用于在一个逗号分隔的字符串列表中查找某个值,并返回其在列表中的位置。...以下是 FIND_IN_SET 函数的基本用法和注意事项:基本用法FIND_IN_SET(search_value, string_list)search_value 是要查找的值。...SELECT FIND_IN_SET('1', '1'); -- 结果:1-- 查找字符串 '2' 在列表 '1,2' 中的位置SELECT FIND_IN_SET('2', '1,2'); -- 结果...:2-- 查找字符串 '6' 在列表 '1' 中的位置SELECT FIND_IN_SET('6', '1'); -- 结果:0应用场景FIND_IN_SET 函数通常用于以下场景:当数据以逗号分隔的字符串形式存储时...性能考虑虽然 FIND_IN_SET 函数在某些情况下提供了简便的解决方案,但其性能可能不如使用专门的关系表。因此,开发者应根据具体的应用场景和性能要求来决定是否使用 FIND_IN_SET

    87910

    【MySql】MySql的数据类型

    tinyint类型 用tinyint数据类型创建表t1: mysql> create table if not exists t1( -> num tinyint -> ); 插入tinyint...of range value for column 'num' at row 1 mysql> 用tinyint unsigned数据类型创建表t2: mysql> create table if not...,这些值实际存储的是“数字”,因为这些选项的每个选项值依次对应如下数字:1,2,3,…最多65535个;当我们添加枚举值时,也可以添加对应的数字编号。...说明:不建议在添加枚举值,集合值的时候采用数字的方式,因为不利于阅读。...当然用数字查找也是可以的: set进行查找: mysql> select * from votes where hobby='羽毛球'; 但是有的人是有多种爱好的,包括了羽毛球,却没有显示出来,只是显示了爱好只有羽毛球的

    1.9K30

    【MySQL】详解MySQL数据类型

    一、数据类型 各类型的数值范围: 在MySQL中,整型可以指定是有符号的和无符号的,默认是有符号的。 可以通过UNSIGNED来说明某个字段是无符号的。...char和varchar类型的区别是char是你指定了多少字符就给你直接开辟多长字符的空间,而varchar是你指定了最多可以开辟多少个字节,但是实际开辟的空间根据实际情况而定,用多少,开辟多少。...;而且出于效率考虑,这些值实际存储的是“数字”,因为这些选项的每个选项值依次对应如下数字:1,2,3,....最多65535个;当我们添加枚举值时,也可以添加对应的数字编号。...mysql> create table votes( -> username varchar(30), -> hobby set('登山','游泳','篮球','武术'), --注意:使用数字标识每个爱好的时候...find_in_set(sub,str_list) :如果 sub 在 str_list 中,则返回下标;如果不在,返回0; str_list 用逗号分隔的字符串。

    1.8K10

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

    SET是一个字符串对象,可以有零或多个值,其值来自表创建时规定的允许的一列值。指定包括多个SET成员的SET列值时各成员之间用逗号(‘,’)间隔开。这样SET成员值本身不能包含逗号。...MySQL用数字保存SET值,所保存值的低阶位对应第1个SET成员。如果在数值上下文中检索一个SET值,检索的值的位设置对应组成列值的SET成员。...例如,你可以这样从一个SET列检索数值值: mysql> SELECT set_col+0 FROM tbl_name; 如果将一个数字保存到SET列中,数字中二进制表示中的位确定了列值中的SET成员。...通常情况,可以使用FIND_IN_SET()函数或LIKE操作符搜索SET值: mysql> SELECT * FROM tbl_name WHERE FIND_IN_SET('value',set_col...下面的语句也是合法的: mysql> SELECT * FROM tbl_name WHERE set_col & 1; mysql> SELECT * FROM tbl_name WHERE set_col

    4.9K10
    领券