楼主: Amygo

[原创] MySQL数据类型:ENUM、SET、BOOL/BOOLEAN、TINYINT特性介绍

[复制链接]
论坛徽章:
2
现任管理团队成员
日期:2020-02-20 02:10:00版主1段
日期:2020-02-20 02:10:12
61#
 楼主| 发表于 2019-7-3 16:04 | 只看该作者
4)通过SQL语句获得求职者意向城市信息

  1. root@localhost : mysqlops 04:09:35> SELECT UC.UID,GROUP_CONCAT(City_Name) FROM city C ,user_work_city UC
  2.     -> WHERE  UC.UID=8263638 AND C.ID=UC.CityID
  3.     -> GROUP BY UC.UID ORDER BY NULL;
  4. +---------+-------------------------+
  5. | UID     | GROUP_CONCAT(City_Name) |
  6. +---------+-------------------------+
  7. | 8263638 | 上海,深圳,杭州          |
  8. +---------+-------------------------+
  9. 1 row in set (0.00 sec)
复制代码


小结:
求职者可挑选工作意向城市列表,可以通过后台程序进行编辑,并且存储在City表中,可以任意进行添加、修改、删除,都不会造成网站程序版本的更新,也不会影响数据库提供的数据服务,且城市名称等信息的变更,只要修改City表即可。另外,通过简便的内连接SQL查询语句,就可以符合MySQL支持的JOIN连接算法—嵌套循环算法,效率非常高,也不需要程序进行特殊处理,完全可以取代集合类型的作用,唯一遗憾就是需要多写点代码。

使用道具 举报

回复
论坛徽章:
2
现任管理团队成员
日期:2020-02-20 02:10:00版主1段
日期:2020-02-20 02:10:12
62#
 楼主| 发表于 2019-7-3 16:05 | 只看该作者
电子商务行网站的商品分类目录
1)创建存储商品分类信息表

  1. <p>CREATE TABLE product_class(ID MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT,</p><p>                          Product_Description VARCHAR(40) NOT NULL DEFAULT '',</p><p>                          Parent_Flag TINYINT NOT NULL DEFAULT 0,</p><p>                          PRIMARY KEY(ID),</p><p>                          UNIQUE INDEX idx_Product_Desc(Product_Description)</p><p>                        )ENGINE=InnoDB CHARACTER SET 'utf8' COLLATE'utf8_general_ci';</p>
复制代码


2)创建存储商品分类目录之间的上下级关系表
  1. <p>
  2. </p><p>CREATE TABLE pc_parent_child(ID MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT,</p><p>                           Parent_ID MEDIUMINT NOT NULL DEFAULT 0,</p><p>                           Child_ID  MEDIUMINT NOT NULL DEFAULT 0,</p><p>                           PRIMARY KEY(ID),</p><p>                           INDEX idx_pid_cid(Parent_ID,Child_ID)        </p>
复制代码

                         )ENGINE=InnoDB CHARACTER SET 'utf8' COLLATE'utf8_general_ci';

3)写入测试数据
  1. <p>
  2. </p><p>INSERT INTO product_class(Product_Description) </p><p>VALUES('大家电'),('平板电视'),('洗衣机'),('冰箱');</p><p>INSERT INTO product_class(Product_Description) </p><p>VALUES('生活电器'),('取暖器'),('加湿器'),('净化器');</p><p>
  3. </p><p>INSERT INTO pc_parent_child(Parent_ID,Child_ID)  VALUES(1,2);</p><p>INSERT INTO pc_parent_child(Parent_ID,Child_ID)  VALUES(1,3);</p><p>INSERT INTO pc_parent_child(Parent_ID,Child_ID)  VALUES(5,8);</p>
复制代码


4)商品分类数据查询
商品分类目录的数据读取,都是先读取父节点的信息,再根据父节点信息读取其下子节点的数据信息。

  1. <p>root@localhost : mysqlops 05:28:41> SELECT M.Product_Description </p><p>    -> FROM product_class M </p><p>    ->       INNER JOIN pc_parent_child N  ON M.ID=N.Child_ID</p><p>    -> WHERE N.Parent_ID=1 ;</p><p>+---------------------+</p><p>| Product_Description |</p><p>+---------------------+</p><p>| 平板电视            |</p><p>| 洗衣机              |</p><p>+---------------------+</p><p>2 rows in set (0.00 sec)</p>
复制代码


小结:
若是采用枚举类型存储商品分类信息,我们则可以简便地创建一张表,2个字段即可实现上述的做法,最大的缺陷是子节点升级为父节点的时候,则需要发布网站程序与做数据库结构变更。修改枚举类型字段的定义属性,必须以尾部追加的方式,才不影响数据库提供的数据服务。使用我们介绍的替代办法,则需要工程师编写更多的代码实现,可以借助图形化管理工具轻松完成,各自都有优缺点。

一句话总结:任何解决方案,必须从技术、开发成本、维护成本、可靠性等多个角度综合论证,寻找最适合团队、业务场景的方案。



使用道具 举报

回复
论坛徽章:
2
现任管理团队成员
日期:2020-02-20 02:10:00版主1段
日期:2020-02-20 02:10:12
63#
 楼主| 发表于 2019-7-3 16:08 | 只看该作者


好了,《MySQL数据类型测试》一文到现在已经完全更新完毕了,希望这些用心总结的文章能够真正的帮到各位同仁们。后面会开始更新新专题,感兴趣的可以先关注我哦~有什么疑问也可以发帖留言。另外感兴趣的朋友也可以看看我之前更新的帖子——《MySQL分布式事务数据库开发规范

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表