MySQL 中NULL和空值的区别,索引列是否可空值或null 您所在的位置:网站首页 mysql判断字段为空 MySQL 中NULL和空值的区别,索引列是否可空值或null

MySQL 中NULL和空值的区别,索引列是否可空值或null

2023-08-15 16:55| 来源: 网络整理| 查看: 265

在创建表的时候尽量把字段的默认值设置成 not null,除非你想存储null;字符串类型可以设置成' ',数字类型的可以设置成0,或者是其他的特殊值,作为字段的默认值。

因为在mysql中为null的的字段,做统计的时候也不会被统计进去,如果想统计进去必须做特定的处理,这样做比较复杂。

mysql中为null的的字段其实是走索引的。但is null,is not null是不走索引的。

对于 MyISAM存储引擎:

MySQL难以优化引用了可空列的查询,它会使索引、索引统计和值更加复杂。 可空列需要更多的储存空间,还需要在MySQL内部进行特殊处理。当可空列被索引的时候, 每条记录都需要一个额外的字节,还可能导致 MyISAM 中固定大小的索引(例如一个整数列上的索引)变成可变大小的索引。 

创建表

CREATE TABLE test_null (  `id` int(11) NOT NULL AUTO_INCREMENT,   `name` varchar(32) DEFAULT '' ,   `name_null` varchar(32) DEFAULT NULL,   `name_empty` varchar(32)  DEFAULT '',   PRIMARY KEY (`id`) )ENGINE=InnoDB DEFAULT CHARSET=utf8;

(1)在进行count()统计某列的记录数的时候(null不会统计进来)或者查询不是某个值的时候(null值不会查出来),但是空值是会进行统计到其中的。当我们做一些统计表的时候如果统计的数据老是不对的时候,需要考虑值为null的字段

 

  如果我想查找name_null不是张三的个数,如果where子句直接是name_null '张三',并没有把name_null为null的情况统计进来。sql如下:

 

以上的统计数据不是我们想要的结果这个时候需要做特殊的处理:sql如下:先在where子句中控制需要的数据,然后用count(*)做统计,所以有的时候可以用count(地段)做统计数量,有的时候不可以

大家可以试试统计name_empty默认值给空的字段

(2)MySQL中的NULL其实是占用空间的,空值('')是不占用空间的

(3)判断NULL 用IS NULL 或者 is not null,在sql语句中可以用IFNULL(expr1,expr2)函数,如果想判断空字符用=''或者 、!=''来进行处理。

 

 

 

 

 

 



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有