MySQL字段属性——NULL与NOT NULL

前言

       许多小伙伴处理MySQL数据库中的数据时常常会看到某些字段的值为NULL,有些小伙伴可能会疑问NULL值到底有什么用,为什么很多人推荐在设置数据库字段属性时一定要设置成NOT NULL,那么对于实际开发中到底要不要把所有字段都设置成 NOT NULL呢?别急,首先我们得了解NULL 和NOT NULL之间的区别,这样咱们在查询数据时知道怎么处理NULL,也避免了在实际项目中碰到NULL处理不当而踩坑。


关于NULL的一些概念

1.1 NULL 与NOT NULL

       NULL和NOT NULL都属于Mysql字段的属性,它不属于任何数据类型。NULL代表的是一个未知值,它既不等同于‘ ’(空值),也不同于0或者其他任何默认值,它和空值最大的区别是空值不占用空间,而NULL是占用存储空间的,比如在Myisam的表中NULL会占用 1 bit的额外空间。

       在MySQL中,当一个字段没有被明确设置成NOT NULL时,数据库会默认为我们添加上NULL约束。有些开发人员在设计表的时候由于懒惰直接使用MySQL的默认推荐设置(允许该字段可使用NULL值)而导致在使用NULL的场景中得出不确定的查询结果以及引起数据库性能的下降。

       那么,我们可以怎么处理NULL值呢?

  • 使用is null或者is not null

       is null和is not null是MySQL的运算符。当我们在查询字段值为NULL的时候应该使用is null而不能用“=”,因为NULL不等于任何其他值,优化器会把“= null”的查询给过滤掉而不返回任何数据;在查询字段值不为空的时候可以使用is not null。

SELECT * FROM User WHERE name IS NULL;
SELECT * FROM User WHERE name IS NOT NULL;

  • 使用IFNULL()函数

       IFNULL()函数有两个参数,如果第一个参数不是NULL则返回第一个参数,否则返回第二个参数。

SELECT IFNULL(score,0) FROM table_name;

       可以使用 IFNULL()函数将所有的NULL值替换成指定的值。

  • 使用COALESCE()函数

       COALESCE()函数定义:返回参数里第一个不为NULL的的值,如果所有参数值都为NULL,则返回NULL。

       COALESCE()函数有两种用法:

1.COALESCE ( expression1, expression2 );
2.COALESCE ( expression1, expression2, ... expression-n );

       其中第一种就相当于Oracle中的nvl或者mysql中的ifnull,写成表达式的形式为:

CASE WHEN expression1 IS NOT NULL THEN expression1 ELSE
expression2 END;

       第二种可以包含n个表达式,表示如果第一个不为空取第一个,否则判断下一个,以此类推,如果全部为空,则返回null值。

  • 使用DEFAULT关键字

       在创建表时,可以为列指定DEFAULT值,如果插入数据时没有为该列提供值,MySQL将使用DEFAULT值。

CREATE TABLE User (
    score INT DEFAULT 0
);

  • 使用NOT NULL约束

       在创建表时,可以为列添加NOT NULL约束,这将确保该列始终有一个值,即使是默认值。

CREATE TABLE User (
    score INT NOT NULL DEFAULT 0
);

       以上就是处理NULL值的几种方案。当然我们可以根据具体情况选择适合的方法。


  

总结

  • 在设计数据库时,尽量避免允许NULL值,除非你有明确的理由。
  • 使用合适的默认值代替NULL。
  • 在查询时,总是考虑NULL值的情况,并使用适当的操作符和函数。
  • 在应用程序逻辑中,正确处理来自数据库的NULL值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值