前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL字段null和not null学习思考

MySQL字段null和not null学习思考

作者头像
发布2019-11-04 12:11:59
2.7K0
发布2019-11-04 12:11:59
举报
文章被收录于专栏:WD学习记录WD学习记录

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/sxllllwd/article/details/102891833

最近,在开发过程中,建表的时候有个涉及到时间的字段。开始时,使用了not null,default值为0000-00-00 00:00:00。但是有个同事说,这个值很有可能不存在,只有部分情况下才会存在,应当使用null,节省空间。开始时,使用not null的原因也是因为之前的一位前辈说数据库建表时,所有字段尽量为not null,并且设默认值。然后通过代码保证。因此有重新查阅博客文档了解其原因。

最后的理解是:mysql所有字段尽可能使用not null。最终时间默认值设为1970-01-01 08:00:00,使用这个的原因是该时间对应的时间戳是0。担心万一有用到时间戳的地方,0000-00-00 00:00:00对应的时间戳是一个负数。

对于MYSQL特殊的注意事项,对于timestamp数据类型,如果往这个数据类型插入的列插入NULL值,则出现的是当前系统时间,插入空值,则出现0000-00-00 00:00:00。

除非有特别的原因使用NULL值,应该总是让字段保持not null。

空值跟NULL是两个概念

(1)空值不占用空间

(2)MYSQL中NULL其实是占用空间的。

在数据库里是严格区分的,任何数跟NULL进行运算都是NULL, 判断值是否等于NULL,不能简单用=,而要用IS NULL关键字。SQL语句函数中可以使用ifnull()哈数进行处理,判断空字符串用=''或者<>''来进行处理

含有空值的列很难进行查询优化,而且对表索引时不会存储NULL值的,所以如果索引字段可以为NULL,索引的效率会下降很多,因为它们使得索引、索引的统计信息以及比较运算更加复杂。你应该用0、一个特殊值或者一个空串代替NULL。(影响索引效率的原因:NULL不是空值,而是要占用空间,所以MYSQL进行比较的时候,NULL会参与字段比较,所以对效率有一部分影响。且B树索引不会存储NULL值的,所以如果索引的字段可以为NULL,索引的效率会下降很多。)

联表查询的时候,例如LEFT JOIN table2,如果没有记录,则查找出的table2字段都是NULL,加入table2有些字段本身可以是null,那么除非把table2中not null中的字段查出来,否则就难以区分到底是没有关联记录还是其他情况

数据库的字段设置NOT NULL,仅仅说明该字段不能为NULL,只有在插入数据为NULL的情况下会报错。

在进行count()统计某列的记录数的时候,如果采用NULL值,系统会自动忽略掉,但是空值是会被统计到的。

MYSQL NULL特殊的影响和使用:https://opensource.actionsky.com/20190710-mysql/

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-11-04 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档