gpt4 book ai didi

MySQL中关于null值的一个小问题

转载 作者:qq735679552 更新时间:2022-09-27 22:32:09 25 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章MySQL中关于null值的一个小问题由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

    今天在测试null值的时候,发现了一个小问题,记录在这里,不知道大家以前遇到过没.

    事情发展是这样的,在过滤一个表中的数值的时候,需要把age=2的列给剔除掉,然后查看剩余的列信息,这个操作看起来比较简单,我用一个表模拟一下过程:

?
1
2
3
4
5
6
7
create  table  `test` (
   `id`  int (11)  not  null  auto_increment,
   `age`  int (11)  default  null ,
   `score`  varchar (20)  not  null  default  '' ,
   primary  key  (`id`),
   key  `idx_score` (`score`)
) engine=innodb auto_increment=12  default  charset=utf8

  表结构如上,其中id和score都加了not null的限制,而age字段没有添加这个约束,然后我们先插入一部分数据,如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
mysql:yeyztest 23:32:57>> select  from  test;
+ ----+------+-------+
| id | age  | score |
+ ----+------+-------+
|  1 |    1 | 5     |
|  2 |    2 | 10    |
|  5 |    5 | 25    |
|  8 |    8 | 40    |
|  9 |    2 | 45    |
| 10 |    5 | 50    |
| 11 |    8 | 55    |
+ ----+------+-------+
rows  in  set  (0.00 sec)

   当前这组数据是全量的,每个字段都有值,然后我们使用下面的sql语句来查询制定记录:

?
1
select * from test where id != 2;

我们查看结果:

?
1
2
3
4
5
6
7
8
9
10
11
mysql:yeyztest 23:33:14>> select  from  test  where  age!=2;
+ ----+------+-------+
| id | age  | score |
+ ----+------+-------+
|  1 |    1 | 5     |
|  5 |    5 | 25    |
|  8 |    8 | 40    |
| 10 |    5 | 50    |
| 11 |    8 | 55    |
+ ----+------+-------+
rows  in  set  (0.00 sec)

此时我们插入两条记录进去:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
mysql:yeyztest 23:33:17>> insert  into  test (id,score)  values  (12,60);
query ok, 1 row affected (0.00 sec)
 
mysql:yeyztest 23:34:02>> insert  into  test (id,score)  values  (13,65);
query ok, 1 row affected (0.00 sec)
 
mysql:yeyztest 23:34:10>> select  from  test;
+ ----+------+-------+
| id | age  | score |
+ ----+------+-------+
|  1 |    1 | 5     |
|  2 |    2 | 10    |
|  5 |    5 | 25    |
|  8 |    8 | 40    |
|  9 |    2 | 45    |
| 10 |    5 | 50    |
| 11 |    8 | 55    |
| 12 |  null  | 60    |
| 13 |  null  | 65    |
+ ----+------+-------+
rows  in  set  (0.00 sec)

再次使用上面的语句进行查询,可以看到结果如下:

?
1
2
3
4
5
6
7
8
9
10
11
mysql:yeyztest 23:34:15>> select  from  test  where  age!=2;
+ ----+------+-------+
| id | age  | score |
+ ----+------+-------+
|  1 |    1 | 5     |
|  5 |    5 | 25    |
|  8 |    8 | 40    |
| 10 |    5 | 50    |
| 11 |    8 | 55    |
+ ----+------+-------+
rows  in  set  (0.00 sec)

   也就是说,当记录中包含null值的时候,使用反向匹配age!=2是无法得到全量的查询结果的,这明显不符合我们的预期.

   其实这个问题,在之前的文章中有说到过,就是在一条数据记录里面,null值字段和一般的字段是不在一起存储的,null值字段是存储在null值列表里面的。所以造成了检索时候不匹配的现象,这个还是比较重要的一个点,希望对大家有用.

   声明一下,测试环境是5.7.16版本的mysql.

以上就是mysql中关于null值的一个小问题的详细内容,更多关于mysql null值的资料请关注我其它相关文章! 。

原文链接:https://mp.weixin.qq.com/s/rzMVf4JJktHeOSKJG6QWBw 。

最后此篇关于MySQL中关于null值的一个小问题的文章就讲到这里了,如果你想了解更多关于MySQL中关于null值的一个小问题的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com