做一套公司网站费用,网站建设如何不被忽悠,网站如何编辑,广东建设企业网站怎么样在使用数据库时#xff0c;有时需要表示未知值#xff0c;这时可以使用NULL值表示。引入NULL值后#xff0c;会对原有的使用产生影响#xff0c;这里记录下常见的场景#xff0c;以做记录。
NULL含义
在MySQL中#xff0c;NULL值表示一个未知值#xff0c;表示不可知、…在使用数据库时有时需要表示未知值这时可以使用NULL值表示。引入NULL值后会对原有的使用产生影响这里记录下常见的场景以做记录。
NULL含义
在MySQL中NULL值表示一个未知值表示不可知、不确定。NULL值不同于0或空字符串’。NULL不与任何值相等即使是其本身。
NULL的存储
表中的某些列可能会存储 NULL 值如果把这些 NULL 值都放到记录的真实数据中会比较浪费空间。MySQL 使用Compact Row Format记录NULL值。具体来说Compact Row Format 中每个行记录都会有一个Bit vector来记录行中出现NULL的字段长度为 N / 8 向上取整其中 N为值NULL的字段数。 二进制位的值为1时代表该列的值为NULL。 二进制位的值为0时代表该列的值不为NULL。
NULL使用场景
NULL的比较
NULL不与任何值相等即使是其本身。如果将NULL值与另一个NULL值或任何其他值进行比较则结果为NULL。 为了实现对NULL的比较MySQL提供了三大运算符: (1) IS NULL: 当列的值是 NULL此运算符返回 true。 (2) IS NOT NULL: 当列的值不为 NULL, 运算符返回 true。 (3) : 比较操作符不同于 运算符当比较的的两个值相等或者都为 NULL 时返回 true。 注意不能使用 NULL 或 ! NULL 在列中查找 NULL 值。
NULL与SELECT
执行SELECT操作时如果列的值为NULL可以使用 IS NULL、IS NOT NULL、 运算符。
NULL与COUNT
执行COUNT操作时如果使用COUNT(column_name)统计行数需要注意列值为空的情况。如果column_name是非主键字段那么只会统计列值为NULL的行数需要说明的是就这种情况下不管在 InnoDB 引擎 还是在 MyISAM引擎中非主键这个字段如果添加了索引且覆盖该字段则可基于索引统计行数如果未添加索引则会触发全表扫描。 更多COUNT函数的使用可以参考笔者MySQL中count(*)和count(1)和count(column)使用比较一文。
NULL与数据运算
NULL值与其他值进行运算时结果总是为NULL。且不同的运算符可能不能容忍NULL的场景引入空指针问题等。
NULL与索引
MySQL中某一列数据含有NULL时并不一定会造成索引失效。在有NULL值的字段上使用常用的索引如普通索引、复合索引、全文索引等不会使索引失效。但是在使用空间索引的情况下该列就必须为 NOT NULL。
NULL与排序
在使用ORDER BY排序的时候如果是升序排序(ASC)那么 NULL 值在所有其他值之前如果是降序排序(DESC)那么 NULL 值在所有其他值之后。注意这种处理并不是说明NULL值比任何值大或小只是一种约定。
总结
在MySQL中引入NULL值表示表示一个未知值表示不可知、不确定。尽管提供了NULL值但是在日常开发中不建议使用NULL值建议为其设置默认值如空字符串或 0 等。如果必须使用NULL对于判空的场景可以使用IS NULL或 IS NOT NULL或。如果需要统计行数需要注意COUNT(column_name)不能统计非NULL的值。如果需要执行计算也要注意NULL与任何值进行运算时其结果均为NULL且可能引入空指针的问题。此外引入NULL值后还需注意索引是否会失效如在空间索引中列值必须为 NOT NULL。在使用ORDER BY排序时如果是升序排序那么 NULL 值在所有其他值之前如果是降序排序(DESC)那么 NULL 值在所有其他值之后。 简言之数据库需要对 NULL 值进行特殊处理针对 NULL 的值使用有以下建议 【建议】不推荐使用NULL值建议为其设置默认值。 【建议】推荐使用 IS NULL(cloumn) 来判断 NULL值。
参考
https://zhuanlan.zhihu.com/p/140089695 MySQL细说NULL https://www.runoob.com/mysql/mysql-null.html MySQL NULL 值处理 https://www.yiibai.com/mysql/null.html MySQL NULL值简介 https://zhuanlan.zhihu.com/p/611947091 MySQL允许字段为null会导致5个问题个个致命 https://www.cnblogs.com/xiaolincoding/p/16941244.html MySQL 的 NULL 值是怎么存储的 https://juejin.cn/post/7028203652099604516 深入探究MySQL中的NULL 《Java开发手册》 阿里巴巴