字段为什么要设置成 not null?

简介: 字段为什么要设置成 not null?

首先说一点,null 和空值不一样,空值不占用空间,null 占用空间,所以字段设置成 not null 之后仍然可以插入空值。

字段设置成 not null 的原因有以下几点:

1.NULL 值会影响一些函数的计算,如 count 函数遇到 NULL 值,这条记录不会统计在内。

2.NOT IN 在有 NULL 值的情况下返回的结果都是空值

3.B 树不存储 NULL,所以索引用不到 NULL,会造成第一点钟说的统计不到的情况。

select * from `user` where username NOT IN (select username from `user` where id != 0),这条查询语句应该查到 zhangsan 这条数据,但是结果显示为 null。

MySQL 在进行比较的时候,NULL 会参与字段的比较,因为 NULL 是一种比较特殊的数据类型,数据库在处理时需要进行特数处理,增加了数据库处理记录的复杂性。

相关文章
|
5月前
|
SQL 数据库
MyBatisPlus-null判定及查询指定字段
MyBatisPlus-null判定及查询指定字段
250 0
|
10月前
|
关系型数据库 MySQL
Mysql排序字段为NULL如何排序
讲述工作中遇到的Mysql排序字段为NULL时如何排序
|
22天前
|
XML Java 数据库连接
MyBatis返回Map时值为null的字段会丢失
MyBatis返回Map时值为null的字段会丢失
|
5月前
|
存储 关系型数据库 MySQL
Flink CDC中mysql cdc 抽取这个时间字段的值为null 有什么好的解决方案吗 ?
Flink CDC中mysql cdc 抽取这个时间字段的值为null 有什么好的解决方案吗 ?
101 0
|
2月前
|
Java 数据库连接 mybatis
mybatis plus字段为null或空字符串把原来的数据也更新了,只需要注解
mybatis plus字段为null或空字符串把原来的数据也更新了,只需要注解
22 0
|
3月前
|
SQL Java 关系型数据库
JDBC PreparedStatement 字段值为null导致TBase带宽飙升的案例分析
JDBC PreparedStatement 字段值为null导致TBase带宽飙升的案例分析
49 0
|
10月前
|
SQL 数据库
SQL中字段跟子查询结果判等,子查询结果为null的处理办法
前言:今天写功能的时候遇到一个问题,SQL中字段跟子查询结果判等,子查询结果为null,查询不到数据
|
5月前
|
关系型数据库 MySQL 开发者
MySQL 字段约束 null, not null, default, auto_increment
前言:转载,觉得有用就发了一遍 在 MySQL 中,每个字段定义都包含附加约束或者修饰符,这些可以用来增加对所输入数据的约束。 今天我们就来看一下 MySQL 的字段约束: NULL 和 NOT NULL 修饰符、DEFAULT 修饰符,AUTO_INCREMENT 修饰符。
120 0
|
6月前
|
关系型数据库 MySQL 数据库
Flink CDC中mysql 字段设置了默认值 ,然后插入数据时 指定该字段为null 会返回字段默认值 而不是null?
Flink CDC中mysql 字段设置了默认值 ,然后插入数据时 指定该字段为null 会返回字段默认值 而不是null?
154 2