Mysql (set集合与enum枚举) 数据类型

https://blog.****.net/persistencegoing/article/details/84376427

 All rights reserved.No part of this article may be reproduced or distributed by any means,or stored in a database or retrieval system,without the prior written permission of persistenceGoing author
 

 

set集合与enum枚举有点类似,但set允许存在多个,enum存在单个

建表

CREATE TABLE `set_table` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `set` set('1','2','3','4','5','11') DEFAULT '1',
  `int` int(11) DEFAULT NULL,
  `enum` enum('1','2') DEFAULT '1',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=utf8mb4;

 

添加数据


 

INSERT INTO `set_table` (`id`, `set`, `int`, `enum`) VALUES ('1', '2,3', '3', '1');
INSERT INTO `set_table` (`id`, `set`, `int`, `enum`) VALUES ('2', '2,3', '6', '2');
INSERT INTO `set_table` (`id`, `set`, `int`, `enum`) VALUES ('3', '1,2,3', '2', '1');
INSERT INTO `set_table` (`id`, `set`, `int`, `enum`) VALUES ('4', '11', '3', '2');
INSERT INTO `set_table` (`id`, `set`, `int`, `enum`) VALUES ('10', '1', '16', NULL);
INSERT INTO `set_table` (`id`, `set`, `int`, `enum`) VALUES ('11', '1,3', '18', NULL);
INSERT INTO `set_table` (`id`, `set`, `int`, `enum`) VALUES ('12', '1,2', '22', NULL);
INSERT INTO `set_table` (`id`, `set`, `int`, `enum`) VALUES ('13', '2,3', '26', NULL);
INSERT INTO `set_table` (`id`, `set`, `int`, `enum`) VALUES ('15', '2,3', '18', NULL);
INSERT INTO `set_table` (`id`, `set`, `int`, `enum`) VALUES ('16', '2,3', '19', NULL);
INSERT INTO `set_table` (`id`, `set`, `int`, `enum`) VALUES ('17', '2,3', '20', NULL);
INSERT INTO `set_table` (`id`, `set`, `int`, `enum`) VALUES ('18', '1,2', '23', NULL);
INSERT INTO `set_table` (`id`, `set`, `int`, `enum`) VALUES ('19', '1,3', '3', '2');

 

若添加set与enum字段,该值不包含建表里面的默认值就会添加报错

Mysql (set集合与enum枚举) 数据类型

 

 

 

Mysql (set集合与enum枚举) 数据类型

 

 

set的存储顺序跟你自定义顺序有关系,是一样的

比如你插入

INSERT INTO `tttttttttttt`.`set_table` (`set`, `int`, `enum`) VALUES ('3,1', '3', '2');
显示还是1,3

 

错误用法:

 SELECT * FROM set_table WHERE `set` & 3;

 SELECT * FROM set_table WHERE `set` & '3';

这两种查询结果都不对

 

 SELECT * FROM set_table WHERE `set` = '2,1';

=的情况顺序必须一样

 SELECT * FROM set_table WHERE `set` = '1,2';

 

 

 SELECT * FROM set_table WHERE `set` LIKE '%1%';

查询不准  会出来11的数据

 

SELECT * FROM set_table WHERE FIND_IN_SET('11',`set`);

也要保证值得顺序(包含即可查询)

 

修改set:

UPDATE `set_table` SET `set`='5' WHERE (`id`='15');
必须修改为包含的默认值

 

若修改的值不包含可能出现脏数据,修改的不是你要的值

UPDATE `set_table` SET `set`='15' WHERE (`id`='16');
 

 

 

希望大家关注我一波,防止以后迷路,有需要的可以加群讨论互相学习java ,学习路线探讨,经验分享与java求职     

群号:721 515 304