Mysql数据NULL避坑指南

        NULL空值是mysql中一种特殊的数据值(即"缺少的未知值"),NULL和字符串空值不是一回事,处理NULL与其他值不同,下面具体阐述相关差异:

          一、NULL运算符

         1、普通数据使用  > 、 <  、=即可做常用的逻辑运算如下:

SELECT  1>2, 1<2 ,1=2,1<>2;

            执行结果:

    

           如果使用  > 、 <  、= 对NULL进行运算,那么会是什么结果

SELECT  1>NULL, 1<NULL,1=NULL,1<>NULL;

           执行结果:

           通过实验结果可知,正常的 >  <  = 是无法对NULL就行运算操作的,因此在日常开发中,如果使用一个NULL值做> < 过滤查询,过滤条件将无法生效,接下来具体研究NULL的运算符。

          2、 IS NULL  和 IS  NOT NULL

          对于NULL的运算mysql提供了IS NULL 、IS NOT NULL 函数进行处理

 SELECT  NULL  IS NULL , NULL  IS NOT NULL, 1 IS NULL, 1 IS NOT NULL;

           二、NULL 查询优化

          对于某列字段存在大量NULL值,而此列字段不得不加索引,那么使用 IS NULL 、IS NOT  NULL 可以提高查询效率。创建一张t_staff表:

CREATE TABLE `t_staff11`  (`staff_no` varchar(30)  COMMENT '职工号',`staff_name` varchar(10) COMMENT '职工姓名',`staff_sex` char(1)  COMMENT '性别(1男,2女)',`password` varchar(255)  COMMENT '密码',`update_time` datetime(0)  COMMENT '更新时间',`status` char(1)  DEFAULT '0' COMMENT '帐号状态(0正常 1停用)',`del_flag` char(1)  DEFAULT '0' COMMENT '删除标志(0代表存在 2代表删除)',`balance` decimal(10, 2)  COMMENT '卡余额'
) ENGINE = InnoDB CHARACTER SET = utf8mb4; 

            插入测试数据:

INSERT INTO`t_staff`(`staff_no`, `staff_name`, `staff_sex`, `password`, `update_time`, `status`, `del_flag`, `balance`) VALUES (71, '韩杰', NULL, 'a5646cc4c84c996ca6620e7d403d6666', NULL, NULL, '0', 1439.20);
INSERT INTO`t_staff`(`staff_no`, `staff_name`, `staff_sex`, `password`, `update_time`, `status`, `del_flag`, `balance`) VALUES (113, '高秀丽', NULL, '82ad07da3d6a7a22d443aa7bd646910d', NULL, NULL, '0', 20.03);
INSERT INTO`t_staff`(`staff_no`, `staff_name`, `staff_sex`, `password`, `update_time`, `status`, `del_flag`, `balance`) VALUES (121, '范嵘', NULL, 'fb207643a9ea6f52b3664f9ecf99bc0a', '2020-07-08 07:30:49', NULL, '0', 673.05);
INSERT INTO`t_staff`(`staff_no`, `staff_name`, `staff_sex`, `password`, `update_time`, `status`, `del_flag`, `balance`) VALUES (160, '马春霞', NULL, 'fa348453e2bebb83452bbd0a304f57ae', NULL, NULL, '0', 196.20);
INSERT INTO`t_staff`(`staff_no`, `staff_name`, `staff_sex`, `password`, `update_time`, `status`, `del_flag`, `balance`) VALUES (161, '何爱莲', '1', '9a236449276f8218a8ac5f5b9b194fd0', NULL, NULL, '0', 380.19);
INSERT INTO`t_staff`(`staff_no`, `staff_name`, `staff_sex`, `password`, `update_time`, `status`, `del_flag`, `balance`) VALUES (171, '冯文静', '1', '414781c1fca2da7e682176aa5849ee2f', NULL, NULL, '0', 490.17);
INSERT INTO`t_staff`(`staff_no`, `staff_name`, `staff_sex`, `password`, `update_time`, `status`, `del_flag`, `balance`) VALUES (175, '许春景', '2', '2b32513984f4bb87a9f8c3270bc1d271', NULL, NULL, '0', 415.10);
INSERT INTO`t_staff`(`staff_no`, `staff_name`, `staff_sex`, `password`, `update_time`, `status`, `del_flag`, `balance`) VALUES (181, '王方', '2', '23dea74889375b09b46f41639559164e', '2020-07-09 09:20:12', NULL, '0', 14.80);
INSERT INTO`t_staff`(`staff_no`, `staff_name`, `staff_sex`, `password`, `update_time`, `status`, `del_flag`, `balance`) VALUES (182, '刘瑞雪', NULL, 'ef3c90bbd1366194c5f6760b1e832616', NULL, NULL, '0', 595.40);
INSERT INTO`t_staff`(`staff_no`, `staff_name`, `staff_sex`, `password`, `update_time`, `status`, `del_flag`, `balance`) VALUES (218, '陆寓非', NULL, '31ad4cf6368c8b04edded92d660e105f', NULL, NULL, '0', 573.30);
INSERT INTO`t_staff`(`staff_no`, `staff_name`, `staff_sex`, `password`, `update_time`, `status`, `del_flag`, `balance`) VALUES (227, '安凤伟', NULL, 'c84d9c929ffe7810470952deccd0f9d8', NULL, NULL, '0', 1412.90);
INSERT INTO`t_staff`(`staff_no`, `staff_name`, `staff_sex`, `password`, `update_time`, `status`, `del_flag`, `balance`) VALUES (234, '张丽', NULL, 'da2e045d2c028960b6f4e4712635032c', NULL, NULL, '0', 381.03);
INSERT INTO`t_staff`(`staff_no`, `staff_name`, `staff_sex`, `password`, `update_time`, `status`, `del_flag`, `balance`) VALUES (267, '沈彩霞', NULL, '0f984f9f5fe54eed031fa6079aa27307', NULL, NULL, '0', 3252.77);
INSERT INTO`t_staff`(`staff_no`, `staff_name`, `staff_sex`, `password`, `update_time`, `status`, `del_flag`, `balance`) VALUES (289, '王东梅', NULL, 'c6666174b32e7555a9557800721d35c7', NULL, NULL, '0', 240.46);
INSERT INTO`t_staff`(`staff_no`, `staff_name`, `staff_sex`, `password`, `update_time`, `status`, `del_flag`, `balance`) VALUES (333, '邹梅', NULL, 'c8acdc2e4824cbf6ac51a7ea76f1f2e6', NULL, NULL, '0', 2223.70);
INSERT INTO`t_staff`(`staff_no`, `staff_name`, `staff_sex`, `password`, `update_time`, `status`, `del_flag`, `balance`) VALUES (339, '董蓓', NULL, '009c26ababd97b0cdb8f277d8c20beee', NULL, NULL, '0', 526.90);
INSERT INTO`t_staff`(`staff_no`, `staff_name`, `staff_sex`, `password`, `update_time`, `status`, `del_flag`, `balance`) VALUES (361, '罗素霞', NULL, '2a089e222d3547b7b60eef4810488f59', NULL, NULL, '0', 2941.00);
INSERT INTO`t_staff`(`staff_no`, `staff_name`, `staff_sex`, `password`, `update_time`, `status`, `del_flag`, `balance`) VALUES (366, '赵艳秋', NULL, '848b0d4e401ceb2d4b01ce74ca5c2b65', NULL, NULL, '0', 1331.91);
INSERT INTO`t_staff`(`staff_no`, `staff_name`, `staff_sex`, `password`, `update_time`, `status`, `del_flag`, `balance`) VALUES (372, '王玉琴', NULL, 'c7453dbe0269a3ae79ba5094f66d050d', NULL, NULL, '0', 3139.20);
INSERT INTO`t_staff`(`staff_no`, `staff_name`, `staff_sex`, `password`, `update_time`, `status`, `del_flag`, `balance`) VALUES (388, '张艳玲', NULL, '2336b05aef2565f62afeba502e545358', NULL, NULL, '0', 602.45);
INSERT INTO`t_staff`(`staff_no`, `staff_name`, `staff_sex`, `password`, `update_time`, `status`, `del_flag`, `balance`) VALUES (390, '郭艳璟', NULL, 'b2f8c3fab16fb554887621e46365862e', '2020-05-19 21:04:25', NULL, '0', 5.50);
INSERT INTO`t_staff`(`staff_no`, `staff_name`, `staff_sex`, `password`, `update_time`, `status`, `del_flag`, `balance`) VALUES (392, '王丽', NULL, 'bf3925cd423c9dc6a911fa32772e4e70', NULL, NULL, '0', 254.79);

           由于satf_sex字段存在大两空值,在其列加索引


ALTER  TABLE  t_staff  ADD  INDEX  sexIndex(staff_sex);

         查询staff_sex为1的数据;

        1、普通=查询

EXPLAIN  SELECT  *  FROM  t_staff WHERE staff_sex =1;

         执行结果如下:

          明明在staff_sex列加索引了,为啥不走索引全表扫描呢,这就就NULL搞的鬼。

          2、对NULL列使用 IS NOT NULL 查询:

EXPLAIN  SELECT  *  FROM  t_staff WHERE  staff_sex IS NOT NULL  AND  staff_sex =1;

          查看执行结果:

         这一次查询索引生效,大大的提高插叙效率。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/9911.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端学习——jsDay4

函数 函数使用 小练习 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widt…

Linux文件理解和系统调用

本文已收录至《Linux知识与编程》专栏&#xff01; 作者&#xff1a;ARMCSKGT 演示环境&#xff1a;CentOS 7 文件理解和系统调用 前言正文文件概念文件描述符文件描述符概念文件管理关于 files_struct文件描述符的分配一切皆文件思想 C语言文件操作文件的打开与关闭文件读写 文…

github中Mermaid的用法

这个东西是最近推出&#xff0c;首先是自己的repository中新建一个readme.md文件 需要一点前端的知识&#xff0c;就是先导入一个依赖文件&#xff0c;然后再写甘特图&#xff0c;如下&#xff1a; ### 甘特图 [<a href"https://mermaid-js.github.io/mermaid/#/gant…

RabbitMQ保证消息的可靠投递,Java实现RabbitMQ消息的可靠投递,Springboot实现RabbitMQ消息的可靠投递

文章目录 一、RabbitMQ消息可靠性概述1、引出问题2、RabbitMQ消息可靠性保证的四个环节 二、保证生产者消息发送到RabbitMQ服务器1、服务端确认&#xff1a;Transaction模式&#xff08;1&#xff09;JavaAPI&#xff08;2&#xff09;springbootAPI 2、服务端确认&#xff1a;…

峰会来袭 | CAD模型转换工具选择的难点和关键点解答

作为世界顶尖的3D软件开发SDK和CAD模型转换工具——HOOPS Exchange已问世十多年&#xff0c;深受开发者好评&#xff0c;并在工业测量、机械加工、造船设计等领域都有广泛的应用。 本次峰会将围绕CAD软件造型技术的多样性、CAD模型数据解析的难点、3D模型转换的经典问题等&…

AI绘画结合GPT 把Ai绘画与摄影玩明白

一、绘画与摄影有什么关系&#xff1f; 绘画和摄影是两种不同的艺术形式&#xff0c;它们都以其自身独特的方式捕捉和表达现实。在某些方面&#xff0c;它们是相互联系的&#xff0c;而在其他方面&#xff0c;它们又有所不同。​ 相似之处&#xff1a;绘画和摄影都是创造性的…

低代码应用开发 高效构建业务系统

低代码是传统软件开发逐步优化和演变的产物&#xff0c;并非全新革命。传统的开发方法过于昂贵和僵化&#xff0c;无法为企业提供所需的高效和敏捷的开发流程&#xff0c;且交付周期长定制能力弱&#xff0c;难以应对不断变化的市场和客户期望&#xff0c;为提高软件开发效率&a…

linux查看内存总结

参考博客&#xff1a; https://www.atlantic.net/vps-hosting/find-top-10-running-processes-by-memory-and-cpu-usage/ 最简单的命令 free -g 查看还有多少可用的内存 但是有的时候这个提供的信息实在是太少了&#xff0c;例如我今天发现服务器上可用的内存只有50G, 我想知…

杠上了,AI绘画圈激烈开战,Midjourney 和 Stable Diffusion 双双更新!

杠上了&#xff0c;AI绘画圈激烈开战&#xff0c;Midjourney 和 Stable Diffusion 双双更新&#xff01; 文章目录 Part 1. Stable Diffusion XL 0.9图像生成重磅升级&#xff1a;35亿66亿双模型Part 2. Midjourney 5.2更新&#xff1a;相机变焦、画面扩展、自定义风格 Part 1.…

可以提升效率的时间管理APP,上班族的好帮手

在时间少&#xff0c;但是待办事项多的快节奏社会中&#xff0c;时间管理成为了很多人都需要面临的重要问题。特别是对于繁忙的上班族来说&#xff0c;高效地利用时间是提升工作效率的关键。有不少上班族都在为如何高效管理时间而烦恼&#xff0c;于是一些时间管理工具应运而生…

矢量数据库对比和选择指南

矢量数据库是为实现高维矢量数据的高效存储、检索和相似性搜索而设计的。使用一种称为嵌入的过程&#xff0c;将向量数据表示为一个连续的、有意义的高维向量。 本文将研究存储/检索向量数据和执行相似性搜索的实用方法&#xff0c;在我们深入研究之前&#xff0c;首先先介绍矢…

云贝餐饮连锁独立版 v2.6.1+公众号+小程序端+抖音端端+全插件免授权安装使用教程

云贝餐饮连锁版这系统应该持续做好多年了比较完善&#xff0c;以前的版本都需要授权一直没使用&#xff0c;整体测试下感觉从体验上还有逻辑设计上都非常不错&#xff0c;首页、会员中心支持DIY装修&#xff0c;配送支持多种平台对接&#xff0c;基本上餐饮行业需要的功能都能满…