MySQL 值为Null会导致的问题

MySQL 值为Null会导致的问题

  • 数据准备
select version();
-- 8.0.30

-- 如果存在 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;

count / distinct数据丢失

select count(*),count(name) from person;

-- count(*) count(name)
-- 10       8

select count(distinct name,mobile) from person;
-- 8
-- 当使用count(distinct col1,col2),如果任何一直字段的值为NULL,即使另外一列有值,查询结果也会被忽略

select 数据丢失

如果某列存在 NULL 值时,如果执行非等于查询(<>/!=)会导致为 NULL 值的结果丢失。

select * from person where name<>'Java' order by id;
-- 或
select * from person where name!='Java' order by id;

导致空指针异常

在使用聚会函数,SUM,AVG等,如何值为NULL,查询结果也是NULL,不会是预期值0.

解决方案是 SUM(ifnull(salary, 0))

group by , order by 会统计NULL值

select * from person order by name;

select name from person GROUP by name;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

半山猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值