首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

MySQL字段null和not null学习思考

开始时,使用not null的原因也是因为之前的一位前辈说数据库建表时,所有字段尽量not null,并且设默认。然后通过代码保证。因此有重新查阅博客文档了解其原因。...最后的理解是:mysql所有字段尽可能使用not null。最终时间默认设为1970-01-01 08:00:00,使用这个的原因是该时间对应的时间戳是0。...除非有特别的原因使用NULL,应该总是让字段保持not null。 空NULL是两个概念 (1)空不占用空间 (2)MYSQLNULL其实是占用空间的。...你应该用0、一个特殊或者一个空串代替NULL。(影响索引效率的原因:NULL不是空,而是要占用空间,所以MYSQL进行比较的时候,NULL会参与字段比较,所以对效率有一部分影响。...,否则就难以区分到底是没有关联记录还是其他情况 数据库的字段设置NOT NULL,仅仅说明该字段不能为NULL,只有在插入数据NULL的情况下会报错。

2.7K20
您找到你想要的搜索结果了吗?
是的
没有找到

SQL - where条件里的!=会过滤null的数据

=会过滤null的数据 在测试数据时忽然发现,使用如下的SQL是无法查询到对应columnnull的数据的: 1 select * from test where name !...= 'Lewis'; 本意是想把表里name的不为Lewis的所有数据都搜索出来,结果发现这样写无法把name的null的数据也包括进来。 上面的!...=换成也是一样的结果,这可能是因为在数据库里null是一个特殊,有自己的判断标准,如果想要把null的数据也一起搜索出来,需要额外加上条件,如下: 1 select * from test where...null的比较 这里另外说下SQL里null的比较,任何与null的比较结果,最后都会变成null,以PostgreSQL例,如下: 1 2 3 4 select null !...另外有些函数是不支持null作为输入参数的,比如count()或者sum()等。

1.9K40

MySQL NULL特性

1,创建表时字段时若未添加默认,则默认为NULL 2,NULLNULL字符串的区别 1)NULL不区分大小写,查询时都显示大写NULL,而NULL字符串则显示插入时候的大小写,查询的时候根据字符集是否区分大小写筛选...7,和NULL的逻辑运算,is NULL运算只有null is null真返回数字1,is not NULL运算只有 null is not null假返回数字0 8,MySQL会把单独的...\N(区分大小写)当作NULL 9,NULL和空字符’’不一样,查询字段空字符时,可以用等号,不考虑长度,都显示空,但是长度不一样 10,空字符和其他字符做算术运算时当作0处理,但是当做分母时运算结果...NULL 11,NULL会被count(字段)函数过滤,但是在count(*)中不会被过滤 12,在group by函数中NULL会当作同一个放在最最小前 13,其他一些函数中如果有NULL...,返回结果NULL,如:

2.6K10

为什么 MySQL 不推荐默认 null

NULL是一种对列的特殊约束,我们创建一个新列时,如果没有明确的使用关键字not null声明该数据列,MySQL会默认的我们添加上NULL约束。...有些开发人员在创建数据表时,由于懒惰直接使用Mysql的默认推荐设置.(即允许字段使用NULL).而这一陋习很容易在使用NULL的场景中得出不确定的查询结果以及引起数据库性能的下降。...NULL并不意味着什么都没有,我们要注意 NULL 跟 ''(空)是两个完全不一样的MySQL中可以操作NULL操作符主要有三个。...虽然select NULL=NULL的结果false,但是在我们使用distinct,group by,order by时,NULL又被认为是相同. 1 (root@localhost mysql3306...null information in the rows.NULL并是占用原有的字段空间存储,而是额外申请一个字节去标注,这个字段添加了NULL约束.

3.9K20

为什么 MySQL 不推荐默认 null

NULL是一种对列的特殊约束,我们创建一个新列时,如果没有明确的使用关键字not null声明该数据列,MySQL会默认的我们添加上NULL约束。...有些开发人员在创建数据表时,由于懒惰直接使用Mysql的默认推荐设置.(即允许字段使用NULL).而这一陋习很容易在使用NULL的场景中得出不确定的查询结果以及引起数据库性能的下降。...NULL并不意味着什么都没有,我们要注意 NULL 跟 ''(空)是两个完全不一样的MySQL中可以操作NULL操作符主要有三个。...虽然select NULL=NULL的结果false,但是在我们使用distinct,group by,order by时,NULL又被认为是相同. 1 (root@localhost mysql3306...null information in the rows.NULL并是占用原有的字段空间存储,而是额外申请一个字节去标注,这个字段添加了NULL约束.

4.7K30

hive 分区表添加字段后,字段结果null

但是发现涉及以前的分区,新增字段都是null。图片开始的时候,以为是老分区文件中没有该字段导致的,重新跑批生成数据,发现老分区中的字段还是null。...图片查看表结构,发现也是有新添加的字段,也就是表的元数据中有新增字段。图片问题原因新增字段后,之前的分区没有同步到新的字段结构,使用的还是之前的元数据信息。而新生成的分区使用的新字段结构的元数据。...hive在select分区表的数据时,会根据分区元数据字段去hdfs文件中读取对应字段。而老分区中没有新字段的元数据,所以没有取到相关,显示null 。解决方案同步老分区的元数据字段结构。...图片后续添加字段的时候,命令里面加cascade就行了,例如:alter table partition_test add columns(col1 string) cascade 。...就能同步老分区的字段了。该问题就是hive的联级问题。

2.4K20

MySQL 字段 NULL 的5大坑,99%人踩过

数据库字段允许空(null)的问题,你遇到过吗?在验证问题之前,我们先建一张测试表及测试数据。...扩展知识:不要使用 count(常量)说明:count(*) 会统计 NULL 的行,而 count(列名) 不会统计此列为 NULL 的行。...2.distinct 数据丢失当使用语句count(distinct column1,column2)时,如果有一个字段空,即使另一列有不同的,那么查询的结果也会将数据丢失, SQL如下所示:查询执行结果如下...解决方案要解决以上的问题,只要修改条件,将姓名不等于Java或者是空的查出来即可,执行 SQL 如下:执行结果如下:可以看出10条数据都查询出来了,这个结果符合我们的正常预期。...解决空指针异常可以使用ifnull()对空进行处理来避免空指针异常:查询执行结果如下:5.增加了查询难度当字段中有了空,对于null或者非null的查询难度就增加了,必须使用与null匹配的查询方法

34240

MySQL中的字段约束 null、not null、default、auto_increment

MySQL默认情况下指定字段NULL修饰符,如果一个字段指定为NOT NULLMySQL则不允许向该字段插入空(这里面说的空都为NULL),因为这是“规定”。...但是在自增列和TIMESTAMP字段中,这个规则并不适用。向这些字段中插入NULL将会导致插入下一个自动增加的或者当前的时间戳。...DEFAULT 修饰符: 可以使用DEFAULT修饰符字段设定一个默认。当插入记录时,您老人家忘记传该字段时,MySQL会自动您设置上该字段的默认。...如果一个字段中没有指定DEFAULT修饰符,MySQL会依据这个字段NULL还是NOT NULL自动设置默认。如果指定字段可以为NULL,则MySQL其设置默认NULL。...修饰符只适用于INT字段,表明MySQL应该自动字段生成一个数(每次在上一次生成的数值上面加1)。

5.3K20

字段设置初始

在开发中字段设置初始这是最基本的要求,但是很多开发人员会在构造函数变多的时候忘记给成员变量设置初始。为了避免这个问题,我们最好在声明的时候直接初始化,而不是在实现构造函数的时候去初始化。...编译器会帮助开发人员在每个构造函数开头放入一段代码,这段代码会把开发人员在定义成员字段时所指定的初始设置给这些成员字段。...虽然通过初始化语句可以避免忘记给成员变量设置初始,但是这并不是在任何情况下都可以使用的。在 C# 中有三种情况是不可以使用初始化语句的。...把对象初始化为 0 或者 null 系统在运行开发人员编写的代码前会执行本身的初始化逻辑,系统本身的初始化逻辑会把相关的内容设置 0 ,这个初始化逻辑是由处理器指令来进行的,这些指令会将要使用到的内存块全部设置...如果我们将对象初始化为 0 或者 null 时,编译器就会在执行完系统本身的初始化逻辑后,将经由系统初始化过的内容清零。

1.6K10

MySQL NULL 处理--Java免费学习

我们已经知道MySQL使用 SQL SELECT 命令及 WHERE 子句来读取数据表中的数据,但是当提供的查询条件字段 NULL 时,该命令可能就无法正常工作。...为了处理这种情况,MySQL提供了三大运算符: IS NULL: 当列的NULL,此运算符返回true。 IS NOT NULL: 当列的不为NULL, 运算符返回true。...: 比较操作符(不同于=运算符),当比较的的两个NULL时返回true。 关于 NULL条件比较运算是比较特殊的。你不能使用 = NULL 或 !...= NULL 在列中查找 NULL 。 在MySQL中,NULL与任何其它的比较(即使是NULL)永远返回false,即 NULL = NULL 返回false 。... PHP脚本中你可以在 if...else 语句来处理变量是否空,并生成相应的条件语句。

1.5K30
领券