常见的Mysql踩坑区

为了看的明显,我们先创建一个表测试一下

  CREATE TABLE `student` (
  `id` INT(11) NOT NULL,
  `name` VARCHAR(20) DEFAULT NULL,
  `age` INT(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8

插入几条数据

INSERT  INTO  student(id,NAME,age) VALUES(1,'张三',NULL),(2,NULL,26),(3,'李四',NULL)

坑区1:比较运算符会自动过滤掉为null的列 为了验证我们的结论,我们执行下列sql语句

     SELECT  *  FROM student WHERE age = NULL
     #没有记录
    SELECT  *  FROM student WHERE age <> 0
    #查到了id = 2的这条记录
     SELECT  *  FROM student WHERE age > 0
     #查到了id = 2的这条记录
    SELECT  *  FROM student WHERE age < 0
    # 没有记录

如果我们想要对包含null值的列查询就不能用比较运算符,如下:

    #查出来age为null的列
    SELECT  *  FROM student WHERE age IS NULL
    #查询age大于0且包含null的列
    SELECT  *  FROM student WHERE age > 0 OR age IS  NULL
    #查询age不为null的列
    SELECT  *  FROM student WHERE age IS NOT NULL

虽然这个问题比较简单,但是我们工作中难免还会出现这样的问题,为了防患于未然,建议我们在建表的时候将所有字段都设置为not null,一来可以避免此类问题的发生,二来可以可以提高对索引的查询效率

作者:三疯

出处:https://my.oschina.net/u/3496194/blog/1546837 您的支持是对博主最大的鼓励,感谢您的认真阅读。本文版权归作者所有,转载请注明出处。

转载于:https://my.oschina.net/u/3496194/blog/1546837

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值