广告
返回顶部
首页 > 资讯 > 数据库 >MySQL中NULL和NOT NULL一样吗?
  • 858
分享到

MySQL中NULL和NOT NULL一样吗?

2024-04-02 19:04:59 858人浏览 薄情痞子
摘要

之前看到有人问到 PHPHub 迁移数据库文件中 nullable 和索引的问题,相信很多用了 Mysql 很久的人(特别是平时过多关注业务开发的人),对这两个字段属性的概念还不是很清楚,一般会有以下疑问:

之前看到有人问到 PHPHub 迁移数据库文件中 nullable 和索引的问题,相信很多用了 Mysql 很久的人(特别是平时过多关注业务开发的人),对这两个字段属性的概念还不是很清楚,一般会有以下疑问:

我字段类型是 not null,为什么我可以插入 空值;

为毛 not null 的效率比 null 高;

判断字段不为空的时候,到底要 column <> '' 还是要用 column is not null 呢。

带着上面几个疑问,我们来深入研究一下 null 和 not null 到底有什么不一样。

null 和 空值 一样么

首先,我们要搞清楚 空值 和 null 的概念:

空值 是不占用空间的;

mysql 中的 null 其实是占用空间的,下面是来自于 MYsql 官方的解释:

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

打个比方来说,你有一个杯子,空值代表杯子是真空的,NULL 代表杯子中装满了空气,虽然杯子看起来都是空的,但是区别是很大的。

一个小栗子

搞清楚 “空值” 和 “NULL” 的概念之后,问题基本就明了了,我们搞个例子测试一下:

CREATE TABLE  `test` (
     `col1` VARCHAR( 10 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
     `col2` VARCHAR( 10 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL
 ) ENGINE = MYISAM ;

问题 1:我字段类型是 not null,为什么我可以插入 空值?

执行下面的 SQL,发生错误,提示 Column 'col1' cannot be null。

INSERT INTO `test` VALUES ( null, 1);

再来一条,执行成功。

INSERT INTO `test` VALUES ('',1);

可见,NOT NULL 的字段是不能插入 NULL 的(这不是废话么  ),只能插入 空值,上面的问题 1 也就有答案了。

问题 2:为毛 not null 的效率比 null 高?

对于问题 2,上面我们已经说过了,NULL 其实并不是空值,而是要占用空间,所以 mysql 在进行比较的时候,NULL 会参与字段比较,所以对效率有一部分影响。

而且 B 树索引时不会存储 NULL 值的,所以如果索引的字段可以为 NULL,索引的效率会下降很多。

问题 3:判断字段不为空的时候,到底要 column<>'' 还是要用 column is not null 呢。

我们再向 test 的表中插入几条数据:

INSERT INTO `test` VALUES ('', NULL);
INSERT INTO `test` VALUES ('1', '2');

现在根据需求,我要统计 test 表中 col1 不为空的所有数据,我是该用 <>'' 还是 IS NOT NULL 呢,让我们来看一下结果的区别。

现在表中的数据如下:

MySQL中NULL和NOT NULL一样吗?

分别对照以下两句 SQL 的执行效果

SELECT * FROM `test` WHERE col1 IS NOT NULL

MySQL中NULL和NOT NULL一样吗?

SELECT * FROM `test` WHERE col1 <> ''

MySQL中NULL和NOT NULL一样吗?

可以看到,结果迥然不同,所以我们一定要根据业务需求,搞清楚到底是要用那种搜索条件,以及要不要为 null。

自己遇到的一个小坑

在许久以前刚入职做第一个需求上线的时候,只一味注意到说是 not null 的效率比 null 的效率高。

好嘛~自己在现有的表上增加字段时全设置为了 not null,感觉自己屌屌的。

因为许多 Service 都有操作这个表的插入动作,结果可想而知,刚上线,错误 Column 'col1' cannot be null 弥漫了整个开发组每个人的邮箱。

所以,当业务量不是很大的情况下,很多技术的使用其实都需要根据实际状况综合考虑。

以上就是MySQL中NULL和NOT NULL详解的详细内容,更多请关注编程网其它相关文章!

您可能感兴趣的文档:

--结束END--

本文标题: MySQL中NULL和NOT NULL一样吗?

本文链接: https://www.lsjlt.com/news/34850.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • MySQL中NULL和NOT NULL一样吗?
    之前看到有人问到 PHPHub 迁移数据库文件中 nullable 和索引的问题,相信很多用了 MySQL 很久的人(特别是平时过多关注业务开发的人),对这两个字段属性的概念还不是很清楚,一般会有以下疑问:...
    99+
    2022-10-18
  • 【MySQL】 IS NOT NULL 和 != NULL 的区别?
    背景 最近在开发小伙伴的需求,遇到了一个数据库统计的问题, is not null 结果正确 !=null 结果就不对,然后就激发了获取真理的想法,那必须的查查 咋回事嘞? 开整 在用MySQL的过...
    99+
    2023-09-11
    mysql 数学建模 数据库
  • MySQL“IS NULL”和“IS NOT NULL”有什么好处?
    我们知道,在使用 NULL 和比较运算符时,我们不会得到任何有意义的结果集。为了从此类比较中获得有意义的结果,我们可以使用“IS NULL”和“IS NOT NULL”。示例 mysql> Select 10 IS NULL; +--...
    99+
    2023-10-22
  • MySQL null与not null和null与空值''''的区别详解
    相信很多用了MySQL很久的人,对这两个字段属性的概念还不是很清楚,一般会有以下疑问: 我字段类型是not null,为什么我可以插入空值 为毛not null的效率比null高 判断字段不为空的时候,...
    99+
    2022-05-28
    MySQL null与not null MySQL null与空值''''''''
  • Oracle中is null和is not null如何优化
    这篇文章给大家分享的是有关Oracle中is null和is not null如何优化的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。最近工作的时候遇到了比较大的数据查询,自己的s...
    99+
    2022-10-18
  • MySQL中建表时可空(NULL)和非空(NOT NULL)的用法详解
    对于MySQL的一些个规范,某些公司建表规范中有一项要求是所有字段非空,意味着没有值的时候存储一个默认值。其实所有字段非空这么说应该是绝对了,应该说是尽可能非空,某些情况下不可能给出一个默认值。 那么这条要求,是基于...
    99+
    2022-05-19
    MySQL 建表可空 MySQL 建表非空 MySQL 建表
  • mysql中not null是不是索引
    本篇内容介绍了“mysql中not null是不是索引”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! ...
    99+
    2022-10-19
  • MySQL中可为空的字段设置为NULL还是NOT NULL
    经常用mysql的人可能会遇到下面几种情况: 1、我字段类型是not null,为什么我可以插入空值 2、为什么not null的效率比null高 3、判断字段不为空的时候,到底要用 selec ...
    99+
    2022-10-18
  • 一文带你探究MySQL中的NULL
    目录前言1MySQL中的NULL2NULL占用的长度3对NULL值的比较4SQL对NULL值进行处理5值为NULL对查询条件的影响6值为NULL对索引的影响7值为NULL对排序的影响...
    99+
    2022-11-12
  • 你知道mysql中空值和null值的区别吗
    前言 最近发现带的小伙伴写sql对于空值的判断方法不正确,导致程序里面的数据产生错误,在此进行一下整理,方便大家以后正确的判断空值。以下带来示例给大家进行讲解。 建表 create table test (col...
    99+
    2022-05-27
    mysql空值 数据库空字符串和null mysql null和空字符串
  • MySQL中关于null值的一个小问题
        今天在测试null值的时候,发现了一个小问题,记录在这里,不知道大家以前遇到过没。     事情发展是这样的,在过滤一个表中的数值的时候,需要把age=2的列...
    99+
    2022-05-29
    MySQL null值 MySQL null值的问题
  • MySQL中的NULL和空串的区别
    本篇内容主要讲解“MySQL中的NULL和空串的区别”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL中的NULL和空串的区别”吧! ...
    99+
    2022-10-18
  • oracle/mysql中的“不等于“ <> != ^= is not一样吗
    今天小编给大家分享一下oracle/mysql中的“不等于“ <> != ^= is not一样吗的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这...
    99+
    2023-04-19
    oracle mysql
  • MySQL中的空值、null和(N/A)区别
    1 Empty Set和N/A 先讲Empty Set和 N/A,他们其实是一回事,MySQL中Empty Set是指当查询结果为空时,MySQL返回的结果集。 1.1 出现情况 一般情况下,由于一些...
    99+
    2023-09-27
    mysql 数据库
  • Mysql中的NULL和空值实例分析
    本篇内容介绍了“Mysql中的NULL和空值实例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!字段属性的”空值”与”NULL”不一样相信...
    99+
    2023-06-27
  • 如何解决MySQL中NOT IN填坑之列为null的问题
    这篇文章主要介绍了如何解决MySQL中NOT IN填坑之列为null的问题,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。在公司做一个小功能的...
    99+
    2022-10-18
  • MySQL中唯一性约束与NULL的示例分析
    这篇文章给大家分享的是有关MySQL中唯一性约束与NULL的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。前言之前做的一个需求,简化描述下就是接受其他组的 MQ 的消息,...
    99+
    2022-10-18
  • 使用python怎么向mysql中插入一个null值
    这期内容当中小编将会给大家带来有关使用python怎么向mysql中插入一个null值,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。python在mysql中插入null空值sql = ...
    99+
    2023-06-07
  • Mysql中NULL和Empty String的区别是什么
    这期内容当中小编将会给大家带来有关Mysql中NULL和Empty String的区别是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。create tabl...
    99+
    2022-10-18
  • null值在oracle和mysql中有什么不同
    本篇内容主要讲解“null值在oracle和mysql中有什么不同”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“null值在oracle和mysql中有什么不同...
    99+
    2022-10-18
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作