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

MySQL字段null和not null学习思考

作者头像
发布于 2019-11-04 04:11:59
发布于 2019-11-04 04:11:59
2.9K0
举报
文章被收录于专栏: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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
MySQL入门详解(一)---mysql的语言
当客户端连接到服务器是,MySQL访问控制有两个阶段:连接验证 对用户名密码,请求验证 对权限验证
步履不停凡
2019/09/11
1.3K0
mysql 空值(null)和空字符('')的区别
日常开发中,一般都会涉及到数据库增删改查,那么不可避免会遇到Mysql中的NULL和空字符。 空字符('')和空值(null)表面上看都是空,其实存在一些差异:
钢铁知识库
2022/08/20
3.4K0
为什么数据库字段要使用NOT NULL?
最近刚入职新公司,发现数据库设计有点小问题,数据库字段很多没有NOT NULL,对于强迫症晚期患者来说,简直难以忍受,因此有了这篇文章。
艾小仙
2021/04/13
2K0
为什么数据库字段要使用NOT NULL?
面试官:MySQL表设计要注意什么?
其实上面这些问题,我最早想法是,每个问题都可以啰嗦出一篇文章。后来由于良心发现,烟哥就决定用一篇文章将这些问题都讲明白。 当然,我给的回答可能并非标准答案,毕竟是自己的一些工作总结。各位读者有更好的回答,也欢迎交流!
Java3y
2019/07/22
1.6K0
面试官:MySQL表设计要注意什么?
explicit_defaults_for_timestamp参数详解
explicit_defaults_for_timestamp 系统变量决定MySQL服务端对timestamp列中的默认值和NULL值的不同处理方法。此变量自MySQL 5.6.6 版本引入,分为全局级别和会话级别,可动态更新,默认值为OFF。本文主要介绍该参数打开和关闭情况下对timestamp的影响 。
MySQL技术
2019/09/08
4.6K0
带你学MySQL系列 | 奇怪的null值,我该怎么办?看看我给你的总结!
用一个形象的比喻来说明这三者的区别。首先空格很好理解,一个空字符串吗,占据一定的空间大小。不好理解的其实是空值和null,空值相当于一个杯子是真空状态的,什么也没有,null表示的杯子中有空气。
数据分析与统计学之美
2021/11/25
4090
MySQL表的物理设计
在设计好表结构之后, 就需要进行物理设计, 将实体及属性映射到具体表和列. 而合理选择存储引擎和列类型也是数据库设计十分重要的一个环节.
一个架构师
2022/06/20
1.3K0
【黄啊码】MySQL中NULL和““的区别以及对索引的影响
 由此可见,null和''的查询方式不同。而且比较字符 ‘=’’>’ ‘<’ ‘<>’不能用于查询null, 如果需要查询空值(null),需使用is null 和is not null。
黄啊码
2022/06/15
1.1K0
mysql优化策略
在创建表的时候我们使用sql语句,Create table tableName () engine=myisam|innodb;
yaphetsfang
2022/05/10
7260
mysql优化策略
【DB优化】MySql数据库优化概述
[zhangxy@dowload_server1 ~]$ cat /etc/fstab
Luga Lee
2022/03/25
2.4K0
【DB优化】MySql数据库优化概述
从零开发区块链应用(二)--mysql安装及数据库表的安装创建
数据类型是指列、存储过程参数、表达式和局部变量的数据特征,它决定了数据的存储格式,代表了不同的信息类型。有一些数据是要存储为数字的,数字当中有些是要存储为整数、小数、日期型等...
Tiny熊
2022/02/22
1.5K0
Mysql从入门到放弃(三)
insert into 表名(字段1,字段2...) values(值1,值2...)
会呼吸的Coder
2020/02/17
6980
MySQL库表设计小技巧
在我们项目开发中,数据库及表的设计可以说是非常重要,我遇到过很多库表设计比较杂乱的项目,像表名、字段名命名混乱、字段类型设计混乱等等,此类数据库后续极难维护与拓展。我一直相信只有优秀的库表设计才能发挥出MySQL最大的性能,前面有篇文章也分享了数据库的使用规范,本篇文章主要讲几个库表设计的小技巧,希望对大家有所启发。
MySQL技术
2020/05/19
2.8K0
【开发日记】MySQL TIMESTAMP 类型建表异常
MySQL的sql_mode参数会影响对日期时间的处理方式。如果NO_ZERO_DATE或者STRICT_TRANS_TABLES模式被启用,那么默认值'0000-00-00 00:00:00'将被认为是无效的。
全栈开发日记
2023/09/14
4130
【开发日记】MySQL TIMESTAMP 类型建表异常
关于数据库中NOT NUll 的问题。
在codeReview的时候被同事指出 其中object.getCode()的值时哦那个数据库查出来的一个deci类型的并且声明为not null。 类似图下声明的字段:
袁新栋-jeff.yuan
2020/08/26
1.4K0
关于数据库中NOT NUll 的问题。
mysql架构sql基础
clear \c 在客户端有命令打错的情况后面跟上相当于ctrl+c 在5.6中ctrl+c就退出客户端了
萧晚歌
2021/11/30
8940
浅谈MySQL的sql_mode
今天我们来分享一下MySQL的SQL mode , 这也是我们比较容易忽略的一点,我们在一开始安装数据库的时候其实就要先考虑要保留哪些SQL mode,去除哪些,合理的配置能够减少很多不必要的麻烦。
小四的技术之旅
2023/03/02
1.1K1
浅谈MySQL的sql_mode
能避开很多坑的mysql面试题,你知道吗?
最近有一些朋友问我一些mysql相关的面试题,有一些比较基础,有些比较偏。这里就总结一些常见的mysql面试题吧,都是自己平时工作的总结以及经验。大家看完,能避开很多坑。而且很多问题,都是面试中也经常问到!希望能对大家的面试有一些帮助!!!
架构师精进
2019/12/15
2.1K0
时间戳,这样用就对了
时间戳字段在MySQL中经常使用到,比如需要记录一行数据创建的时间或修改的时间时,我们通常会使用时间戳即timestamp字段。本篇文章主要介绍timestamp字段的使用方法及相关参数,希望大家读完能对timestamp有更深的认识。
MySQL技术
2020/01/17
1.2K0
故障分析 | MySQL 迁移后 timestamp 列 cannot be null
爱可生 DBA 团队成员,负责项目日常问题处理及公司平台问题排查。热爱互联网,会摄影、懂厨艺,不会厨艺的 DBA 不是好司机,didi~
爱可生开源社区
2021/11/01
2.2K1
故障分析 | MySQL 迁移后 timestamp 列 cannot be null
相关推荐
MySQL入门详解(一)---mysql的语言
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档