精华内容
下载资源
问答
  • not null
    千次阅读
    2021-03-09 14:17:29
    import org.jetbrains.annotations.NotNull;

    Maven依赖

    <dependency>
        <groupId>org.jetbrains</groupId>
        <artifactId>annotations</artifactId>
        <version>20.1.0</version>
    </dependency>

    待续......

    更多相关内容
  • 上午我收到一条短信,内容是“尊敬的 null 你好,XXX”,当时我就笑了。真是外行看热闹,内行看门道,这是程序员都能 Get 的笑点,说明程序没有正确从数据库获取到我的姓名,然后把空值格式化为了 null

    小伙伴想精准查找自己想看的MySQL文章?喏 → MySQL江湖路 | 专栏目录

      上午我收到一条短信,内容是“尊敬的 null 你好,XXX”,当时我就笑了。真是外行看热闹,内行看门道,这是程序员都能 Get 的笑点,说明程序没有正确从数据库获取到我的姓名,然后把空值格式化为了 null。

    在这里插入图片描述

      我仿佛看到了那个程序员小姐姐被喷的场景,那是个温暖的午后,明媚的阳光洒在办公桌旁,小姐姐正撸着自己的代码,突然… …“啪啪啪!!别睡了哈哥,老板叫你过去开会!” 我c…

    在这里插入图片描述

      言归正传,出现这种情况的原因一般是数据库的数据问题造成的,我大胆猜测几种场景,同学们可以在评论区补充~~

    1. 首次名称入库时出错,把我的名称填写失败,MySQL默认成 null 值,查询时格式化成了’null’字符串;
    2. 我注册时故意在名称中加了\n、\r等下流的数据,导致查询时返回了空字符串’’,正则校验时又出现空指针;
    3. 我把id设置为’null’(别,兄弟们,我还能这么无聊了?~~

      在 MySQL 中,NULL 表示未知的数据,我们在设计表时,常常有老司机告诉我们:

    字段尽可能用NOT NULL,而不是NULL,除非有特殊情况!

      但却都只给结论也不说明原因,就像喝鸡汤不给勺子一样,有点膈应,让不少同学对这些结论只知其一,不明其二。坦白说,老司机也不一定清楚为啥,可能就是他领导让他这么干而已~~

      就像我领导,记得我刚来公司时,他语重心长的叮嘱我:MySQL 建表字段记得用 not null,不然就滚蛋!🙃🙃🙃

      今天我就带你来弄清楚为啥建议你建表字段尽量都使用not null,记得三连哦~

    先看看 MySQL 官网文档提到 NULL 的地方:

      NULL columns require additional space in the rowto record whether their values are NULL. For MyISAM tables, each NULL columntakes one bit extra, rounded up to the nearest byte.

    翻译官:
      NULL列在行中需要额外的空间以记录其值是否为NULL。 对于MyISAM表,每个NULL列都多花一位,四舍五入到最接近的字节。

    其实这是官方在委婉的告诉你,别用NULL就完了~~

      下面我们来看看NULL值有多少坑,这里我会结合 NULL 字段,和你着重说明 sum 函数、count 函数,以及查询条件为 NULL 值时可能踩的坑。

    先给出我们的测试表:

    mysql> select * from demo0527;
    +----+------------+-------+------+
    | id | name       | money | age  |
    +----+------------+-------+------+
    |  1 | 陈哈哈1    |   100 | NULL |
    |  2 | 陈哈哈2    |  NULL | NULL |
    |  3 | NULL       |   100 | NULL |
    +----+------------+-------+------+
    3 rows in set (0.00 sec)
    

    我们通过下面三个用例,结合数据库中表 demo0527 的 null 值来看看:

    • 示例一:通过 sum 函数统计一个只有 NULL 值的列的总和,比如 SUM(age);
    • 示例二:select 记录数量,count 使用一个允许 NULL 的字段,比如 COUNT(name);
    • 示例三:使用 =NULL 条件查询字段值为 NULL 的记录,比如 money=null 条件。

    以上三个示例对应的测试SQL如下:

    SELECT SUM(age) from demo0527;
    SELECT count(name) from demo0527;
    SELECT * FROM demo0527 WHERE money=null;
    

    查询结果:

    mysql> SELECT SUM(age) from demo0527;
    +----------+
    | SUM(age) |
    +----------+
    |     NULL |
    +----------+
    1 row in set (0.00 sec)
    
    mysql> SELECT count(name) from demo0527;
    +-------------+
    | count(name) |
    +-------------+
    |           2 |
    +-------------+
    1 row in set (0.00 sec)
    
    mysql> SELECT * FROM demo0527 WHERE money=null;
    Empty set (0.00 sec)
    
    

      得到的结果,分别是 NULL、2、空List;显然,这三条 SQL 语句的执行结果和我们的期望不同:

    • 虽然表中的 age 都是 NULL,但 SUM(age) 的结果应该是 0 才对;
    • 虽然第三行记录的 name 是 NULL,但查记录总行数应该是 3 才对;
    • 使用 money=NULL 并没有查询到 id=2 的记录,查询条件失效。

    三个示例的原因分别是:

    1. MySQL 中 sum 函数没统计到任何记录时,会返回 null 而不是 0,可以使用 IFNULL(null,0) 函数把 null 转换为 0;
    2. 在MySQL中使用count(字段),不会统计 null 值,COUNT(*) 才能统计所有行;
    3. MySQL 中使用诸如 =、<、> 这样的算数比较操作符比较 NULL 的结果总是 NULL,这种比较就显得没有任何意义,需要使用 IS NULL、IS NOT NULL 或 ISNULL() 函数来比较。有兴趣的同学可以看一下《有意思,原来SQL中的NULL是这么回事儿》

    让我们根据上述原因来相应修改一下 SQL:

    SELECT IFNULL(SUM(age),0) FROM demo0527;
    SELECT COUNT(*) FROM demo0527;
    SELECT * FROM demo0527 WHERE age IS NULL;
    

    修改后我们查询的结果就是我们想要的了:

    mysql> SELECT IFNULL(SUM(age),0) FROM demo0527;
    +--------------------+
    | IFNULL(SUM(age),0) |
    +--------------------+
    |                  0 |
    +--------------------+
    1 row in set (0.00 sec)
    
    mysql> SELECT COUNT(*) FROM demo0527;
    +----------+
    | COUNT(*) |
    +----------+
    |        3 |
    +----------+
    1 row in set (0.00 sec)
    
    mysql> SELECT * FROM demo0527 WHERE age IS NULL;
    +----+------------+-------+------+
    | id | name       | money | age  |
    +----+------------+-------+------+
    |  1 | 陈哈哈1    |   100 | NULL |
    |  2 | 陈哈哈2    |  NULL | NULL |
    |  3 | NULL       |   100 | NULL |
    +----+------------+-------+------+
    3 rows in set (0.00 sec)
    

      另外值得注意的是,不仅money=NULL 条件查不到字段值为 NULL 的记录,当我们使用 SELECT * FROM demo0527 WHERE money <>100; 来查询id=2这行时,也是查不到任何数据的。我们在工作中往往会在这里栽跟头,导致统计不准确,给大家Mark一下

    mysql> SELECT * FROM demo0527 WHERE money <>100;
    Empty set (0.02 sec)
    

      可见MySQL库中的NULL值很容易导致我们在统计、查询表数据时出错,这里有些同学可能会问有没有性能上的提升,算不算SQL优化,其实把NULL列改为NOT NULL带来的性能提升可以忽略,除非确定它带来了问题,否则不需要把它当成优先的优化措施。

      好了,多了就不说了,我劝你耗子尾汁,但推荐你关注我,因为我会让你在快乐中学会很多东西!


    MySQL系列文章汇总与《MySQL江湖路 | 专栏目录》

    往期热门MySQL系列文章

    展开全文
  • mysql、NULL 和 空字符串的区别,怎样理解NULL 这个字段

    1、NULL 和 空字符串的区别

        "NULL"   表示的是一种数据类型,表示未知

         "      "     空字符串的数据类型是字符串,只是这个字符串比较特殊,什么都没有

       怎么理解这个NULL呢?其实就把它当做是一种叫 未知的数据类型 来理解就好了。

    2、NULL值查询效率

            NULL 其实并不是空值,而是要占用空间,所以mysql在进行比较的时候,NULL 会参与字段比较,所以对效率有一部分影响。并且对表索引时是不会存储NULL值的,所以如果索引的字段为NULL时,索引的效率会下降很多,因此我们设置某个字段类型时尽量不要设置NULL

    3、判断一个字段是否为空,应该怎么查询

         首先建立user表,填入以下数据:

        

        下面我们执行以下sql查询

    # 查询 name 为空的数据
    SELECT * FROM `user` WHERE name = NULL;
    SELECT * FROM `user` WHERE name IS NULL;
    SELECT * FROM `user` WHERE name = '';
    SELECT * FROM `user` WHERE name IS NULL OR `name`='';
    # 查询 name 不为空的数据
    SELECT * FROM `user` WHERE name IS NOT NULL;
    SELECT * FROM `user` WHERE name <> NULL;

       SELECT * FROM `user` WHERE name = NULL;   结果1:                                                           

     

    SELECT * FROM `user` WHERE name IS NULL;    结果2:

     

    SELECT * FROM `user` WHERE name = ' ';      结果3:

     

    SELECT * FROM `user` WHERE name IS NULL OR `name`='  ';   结果4:

    SELECT * FROM `user` WHERE name IS NOT NULL;   结果5:

     

    SELECT * FROM `user` WHERE name <> NULL;     结果6:

     从查询结果可以得出:

    1、使用 IS NULL  查出的是 字段为 未知类型的数据

    2、使用IS NOT NULL 查出的是  字段不是  未知类型的数据

    3、使用 IS NULL OR `name`='  ' 查询的是  未知类型和空字符串类型的数据

    总之,我们只要把 NULL 当做是一种数据类型就很好理解这个字段了

    展开全文
  • oracle之is null和is not null的优化

    千次阅读 2021-05-07 13:24:25
    oracle之优化is null语句一:is null的优化方法:通过nvl(字段,j)=j的方式,将字段中为空的数据转化为j,从而正常使用索引。具体实现条件则是:i is null <===> j = nvl(i,j);注意:使用时必须要确保字段的数据...

    oracle之优化is null语句

    一:is null的优化

    方法:通过nvl(字段,j)=j的方式,将字段中为空的数据转化为j,从而正常使用索引。

    具体实现条件则是:i is null <===> j = nvl(i,j);

    注意:使用时必须要确保字段的数据不包含j,例如:(age,15)=15,此时有可能age

    内容是15,此时不可以,j的值要变换,保证不再age的范围之内。

    函数介绍:

    nvl(a,b,c.......):当a为空时取b,当b为空时取c,以此类推。

    当然还有另外一种方式解决这个问题:将null包含到索引中

    --使用nvl函数的方式(不用添加索引,推荐)

    select * from student t where 1=nvl(t.age,1);

    --当t.age不存在等于1的数据时等价于

    --select * from student t where t.age is null;

    --添加索引的方式

    create index idx_age_x on tab_i(decode(age,null,1));

    select * from student t where decode(t.age,null,1)=1;

    二:is not null的优化

    方法:结果集不包含j = nvl(i,j)即可

    通常情况下使用not exists或者比较大小

    示例:

    1:not exists

    select * from student t where not exists

    (select 1 form student s where 1=nvl(s.age,1));

    --11g版本后not in和not exists趋于相似,也可以用not in

    --当t.col_x不存在等于1的数据时等价于

    --select * from student t where t.age is not null;

    2:比较大小

    --当t.age为总是大于1的数值时

    select * from student t where 1

    --当t.age为总是小于1的数值时

    select * from student t where 1>nvl(t.age,1);

    --直接比较大小,暗含了 IS NOT NULL

    select * from student t where t.age>1;

    3:比较长度

    --当t.age的长度总是大于1时

    select * from student t where 2<=length(nvl(t.age,1));

    --因为length函数的参数为空时,其结果为空,因而不能直接使用length函数

    参考链接:

    https://blog.csdn.net/qq_38880340/article/details/84290900

    展开全文
  • 我就想问一下 我知道这个@NotNull是校验为不为空得东西,我想知道的是里面得groups 定义是有什么作用,GroupInterface1这个类应该是自定义的类,他是很普通得实体类,还是说里面定义得特殊方法,看了好多都没有说明...
  • MySQL之is not null, not in优化

    千次阅读 2021-11-26 09:08:35
    代替 (not in 进行 子查询):将子查询 转变为 表连接,相关的逻辑写在 表连接 的关系...代替 (is not null):将 is not null 的字段,使用 ifnull()替换为其他值,然后 ifnull()!=其他值,就能进行筛选了 ...
  • MySQL中建表时可空(NULL)和非空(NOT NULL)的用法详解 MySQL不推荐列默认值设置为null到底是为什么 参考资料: https://blog.csdn.net/qq_30549099/article/details/107395521 ...必须把字段定义为NOT NULL并且...
  • 数据库字段为什么要使用NOT NULL

    千次阅读 2021-04-12 15:23:39
    目前大部分的开发都会把字段全部设置成NOT NULL并且给默认值。通常,对于默认值一般这样设置: 整形,我们一般使用0作为默认值。 字符串,默认空字符串 时间,可以默认1970-01-01 08:00:01,或者默认 0000-00-00 0
  • @NotNull注解不生效

    千次阅读 2022-01-15 20:15:52
    进行参数校验的时候,加了@NotNull注解,@Validated注解和@Valid注解,但是参数校验的时候不生效。 最后发现是因为我的Spring-boot版本较高,后面不需要引入validation-api,hibernate-validator这种依赖,直接引入...
  • 当我们多表join查询时如果添加某个字段is null 或者is not null 关键字时会造成sql的执行速度大幅下降,就像下图一样 不使用is not null 的情况下时 那么对于sql中is not null 可以做这样的一个替换 对于mySql: ...
  • 三、常用的校验注解 ​javax.validation.constraints.NotNull ​@Null 被注释的元素必须为null @NotNull 被注释的元素不能为null @AssertTrue 被注释的元素必须为true @AssertFalse 被注释的元素必须为false @Min...
  • MySQL字段约束-索引-外键 字段修饰符 (约束) NULLNOT NULL修饰符 nullnot null 创建带修饰符的表,测试nullnot null字段区别 mysql> use HA; #使用HA数据库 mysql> create table worker(id int not null,name...
  • postgresql 去除或添加 not null约束

    千次阅读 2020-09-21 20:01:56
    去除 not null 约束 alter table table_name alter column_name drop not null; 添加not null 约束 alter table table_name alter column_name set not null;
  • 这是因为数据在数据库中格式可能为‘’,因此可以加一个条件: where length(trim(col)) = 0 另外,Hive SQL中NULL和‘’有所不同: where length(NULL),length('') ->NULL,0
  • 自定义注解实现@NotNull注解

    万次阅读 2019-06-17 14:45:30
    NotNull notNull = field.getAnnotation(NotNull.class); throw new IllegalArgumentException(notNull.fileName() + " 不能为空"); } // 如果是 list 则应该判断 list 长度. if (invoke != null && invoke....
  • 在日常开发过程中,我们会写一些注解于加在java的实体类属性字段上,或者放到controller层的方法参数中,在进请求或请求的时候会根据字段的注解进对应的校验,简化校验相关的代码。...2、当@NotNull等注解写在Contr.
  • 实体字段校验 @NotNull、@NotEmpty、@NotBlank 1.@NotNull 不能为 null,但可以为 empty,一般用在 Integer 类型的基本数据类型的非空校验上,而且被其标注的字段可以使用 @size、@Max、@Min 对字段数值进行...
  • java的@NotNull怎么用

    千次阅读 2021-07-07 15:15:48
    使用说明 XXXreq{ @NotNull(message = "XXX不能为空") private Integer xxxx=0; } public ApiResponse getXXXXXX(@RequestBody @Valid XXRequest request) { }
  • 创建表后,有时需要对表进行 set not null 或者 set null 设置。 版本 # cat /etc/centos-release CentOS Linux release 7.4.1708 (Core) # # su - postgres $ $ psql -c "select version();" ...
  • NOT NULL constraint failed:

    2019-05-06 12:53:16
    Django创建表格并迁移以后使用django shell创建了一些数据,再通过create函数创建数据时遇到NOT NULL constraint failed: 请帮我看一下吧 这是我的模型 ``` from django.db import models # Create your ...
  • Spring中@NotNull注解@Valid注解简介及使用

    万次阅读 多人点赞 2020-04-29 17:36:50
    目录 前言 @NotNull使用步骤 问题 其他注解 前言 在开发中,为了代码的稳定性不报空指针异常,经常需要判断前端传过来的值是否为空,为空的话就返回前端值为空的提示,才能进行下一步的操作,例如登录操作需要判断传...
  • @NotNull 等注解的简单使用

    万次阅读 多人点赞 2020-07-23 11:35:49
    注册一个账号, 有账号+...前端会做一个判空,但是后端同时也要做一个判空,防止url直接访问 这时后端的代码通常是: if(name!=null){ ... } else if(password!=null){ ...这时候就要用到一个注解@NotNull ... @NotNull(message =
  • mysql中IS NULL、IS NOT NULL不能走索引?

    千次阅读 2020-08-03 16:34:23
    mysql中IS NULL、IS NOT NULL不能走索引? 不知道是啥原因也不知道啥时候, 江湖上流传着这么一个说法 mysql查询条件包含IS NULL、IS NOT NULL、!=、like %* 、like %*%,不能使用索引查询,只能使用全表扫描。 刚入行...
  • SQL NOT NULL约束

    千次阅读 2020-06-08 18:14:30
    SQL NOT NULL约束 一、 说明 本文主要讲一下,SQL的NOT NULL(不为空)约束相关内容。 二、 所用工具 SQL 数据库 三、 内容 1. SQL NOT NULL约束的作用 主要规定表中的数据必须遵守一定的规则,如果存在违反约束的数据...
  • @NotNull 不生效,解决

    千次阅读 2021-06-21 12:59:13
    @NotNull :不能为null .但可以为empty @NotEmpty:不能为null,而且长度必须大于0 @NotBlank:只能作用在String上,不能为null,而且调用trim()后,长度必须大于0 在这些注解使用时,需要搭配 @Valid使用,否则,将...
  • 关于入参校验@NotNull注解的使用

    千次阅读 多人点赞 2021-03-17 10:35:07
    //权益类型 1:券 2:品牌积分 @NotNull(message = "权益类型不可为空") @Pattern(regexp = "[12]",message = "权益类型参数值不正确") private String giftType ; @NotBlank:主要用于校验字符串是否为空串或null,...
  • nullnot nullnull与空值''的区别

    千次阅读 2019-05-29 20:27:23
    相信很多用了MySQL很久的人,对这两个字段属性...2.为毛not null的效率比null高 3.判断字段不为空的时候,到底要 select * from table where column <> '' 还是要用 select * from table wherecolumn is not ...
  • MySQL的WHERE子句中包含 IS NULL、IS NOT NULL、!= 这些条件时便不能使用索引查询,只能使用全表扫描。 这种说法愈演愈烈,甚至被很多同学奉为真理。咱啥话也不说,举个例子。假如我们有个表s1,结构如下: ...
  • Mysql中is null 和 is not null的使用

    万次阅读 2020-03-17 16:51:28
    MySQL 使用 SQL SELECT 命令及 WHERE 子句来读取数据表中的数据,但是当提供的查询条件字段为 NULL 时,该命令可能...IS NOT NULL: 当列的值不为 NULL, 运算符返回 true。 <=>: 比较操作符(不同于 = 运算符)...
  • 看了很多篇文章,关于走不走索引这个问题真是众说纷纭,不如自己实践一波来得准。 先说我的mysql版本为5.7; 再说结论:有时候走,有时候不走。... `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, `nam

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,001,280
精华内容 800,512
关键字:

not null

友情链接: WTL91_5321_Final.zip