在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
正式开始之前,我们先来看下 MySQL 服务器的配置和版本号信息,如下图所示: “兵马未动粮草先行”,看完了相关的配置之后,我们先来创建一张测试表和一些测试数据。 -- 如果存在 person 表先删除 DROP TABLE IF EXISTS person; -- 创建 person 表,其中 username 字段可为空,并为其设置普通索引 CREATE TABLE person ( id INT PRIMARY KEY auto_increment, name VARCHAR(20), mobile VARCHAR(13), index(name) ) ENGINE='innodb'; -- person 表添加测试数据 insert into person(name,mobile) values('Java','13333333330'), ('MySQL','13333333331'), ('Redis','13333333332'), ('Kafka','13333333333'), ('Spring','13333333334'), ('MyBatis','13333333335'), ('RabbitMQ','13333333336'), ('Golang','13333333337'), (NULL,'13333333338'), (NULL,'13333333339'); select * from person; 构建的测试数据,如下图所示: 有了数据之后,我们就来看当列中存在 1.count 数据丢失当某列存在 select count(*),count(name) from person; 查询执行结果如下: 从上述结果可以看出,当使用的是 解决方案如果某列存在 扩展知识:不要使用 count(常量)
2.distinct 数据丢失当使用 select count(distinct name,mobile) from person; 查询执行结果如下: 数据库的原始数据如下: 从上述结果可以看出手机号一列的 10 条数据都是不同的,但查询的结果却为 8。 3.select 数据丢失如果某列存在 我需要查询除 name 等于“Java”以外的所有数据,预期返回的结果是 id 从 2 到 10 的数据,但当执行以下查询时: select * from person where name<>'Java' order by id; -- 或 select * from person where name!='Java' order by id; 查询结果均为以下内容: 可以看出为 解决方案要解决以上的问题,只需要在查询结果中拼加上为 select * from person where name<>'Java' or isnull(name) order by id; 最终的执行结果如下: 4.导致空指针异常如果某列存在 首先,我们先构建一张表和一些测试数据: -- 如果存在 goods 表先删除 DROP TABLE IF EXISTS goods; -- 创建 goods 表 CREATE TABLE goods ( id INT PRIMARY KEY auto_increment, num int ) ENGINE='innodb'; -- goods 表添加测试数据 insert into goods(num) values(3),(6),(6),(NULL); select * from goods; 表中原始数据如下: 接下来我们使用 select sum(num) from goods where id>4; 查询执行结果如下: 当查询的结果为 解决空指针异常 可以使用以下方式来避免空指针异常: select ifnull(sum(num), 0) from goods where id>4; 查询执行结果如下: 5.增加了查询难度当某列值中有 所谓的查询难度增加指的是当进行 还是以 错误用法 1: select * from person where name<>null; 执行结果为空,并没有查询到任何数据,如下图所示: 错误用法 2: select * from person where name!=null; 执行结果也为空,没有查询到任何数据,如下图所示: 正确用法 1: select * from person where name is not null; 执行结果如下: 正确用法 2: select * from person where !isnull(name); 执行结果如下: 推荐用法 阿里巴巴《Java开发手册》推荐我们使用 扩展知识:NULL 不会影响索引 细心的朋友可能发现了,我在创建 然后我们用
从上述结果可以看出,即使 总结本文我们讲了当某列为 到此这篇关于MySQL为Null会导致5个问题(个个致命)的文章就介绍到这了,更多相关MySQL为Null导致问题内容请搜索极客世界以前的文章或继续浏览下面的相关文章希望大家以后多多支持极客世界! |
请发表评论