为什么建议 MySQL 数据库字段一定要设置 NOT NULL

news2024/10/5 7:14:06
1. 前言

建议 MySQL 数据库字段一定要设置 NOT NULL

这句建议你可能听好多人讲过,但是有没有仔细想过为什么别人这么说 ?

在实际开发中,对使不使用 not null 很多人并没有一个明确的标准,要知道某个字段需不需要添加 not null,首先,要知道 null 和 not null 之间的区别,这样你才能更好的玩转 not null,也避免了在项目中可能遇到的一些坑

2. 使用 not null 的理由

一、语义不清晰

null 和 not null 使用空值代表的含义是不一样的

null 我们可以认为这一列的值是未知的,空值则可以认为我们知道这个值,只不过它是空的而已

比如一张表的 name 字段是 null,我们可以认为不知道名字是什么,反之如果是空字符串我们知道没有名字,它就是一个空值

二、聚合函数计算不准确

对于 null 值的列,使用聚合函数的时候会忽略 null 值

比如表里面有两条数据,其中一条数据的 name 字段值为 null,如果对 name 进行 count,表示对非 null 列进行统计,所以查出来的结果为 1,这显然是不符合我们的预期的。但是,在实际开发中一般都是对 id 字段进行统计数量

三、导致等号表达式失效

比如表的 name 字段是 null,如果使用等号查询,是查不到的,必须使用 is null 才能查询出来

四、导致值运算失效

比如表的 age 字段值是 null,加 1 之后结果还是 null,name 字段值是 null,concat 之后结果也变成了 null,这也是不符合我们预期的

五、一些意想不到的问题

比如表里面只有一条 name 为 高启强 的数据,但是查询不等于 高启强 的数据时,显示只有一条,这显然不符合我们的预期

3. 到底要不要使用 not null

个人开发建议,大多数字段应该设置 not null,配合默认值 default 使用更好

比如:

用户状态字段 status,只有两个值 0 禁用 1 正常。应该设置 not null 并设置默认值为 1

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1901234.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【MYSQL】事务隔离级别以及InnerDB底层实现

事务隔离级别 读未提交(Read Uncommitted) 允许事务读取其他事务未提交的数据,可能会导致脏读。 读已提交(Read Committed) 一个事务只能看见已经提交的事务所做的更改,可以避免脏读,但可能…

基于CLIP特征的多模态大模型中的视觉短板问题

【论文极速读】 基于CLIP特征的多模态大模型中的视觉短板问题 FesianXu 20240706 at Tencent WeChat search team 前言 今天读到篇CVPR 24’的论文 [1],讨论了常见的多模态大模型(大多都基于CLIP语义特征,以下简称为MLLM)中的视觉…

阿里云服务器配置、搭建(针对Spring boot和MySQL项目)

这是一篇极其详细且痛苦的文章,还是在两位后端的大佬手把手教导下、以及我找遍全网所有资料、问了N遍AI、甚至直接申请阿里云工单一对一询问客服一整天、连续清空再上传反复30多次整个项目jar包......总结出来的终极要人命踩坑的问题总结 一、首先购买服务器 其实不…

Apache Seata分布式事务及其三种模式详解

本文来自 Apache Seata官方文档,欢迎访问官网,查看更多深度文章。 本文来自 Apache Seata官方文档,欢迎访问官网,查看更多深度文章。 Apache Seata分布式事务及其三种模式详解 分布式事务 Seata 及其三种模式详解 | Meetup#3 回顾…

基于TCP的在线词典系统(分阶段实现)

1.功能说明 一共四个功能: 注册 登录 查询单词 查询历史记录 单词和解释保存在文件中,单词和解释只占一行, 一行最多300个字节,单词和解释之间至少有一个空格。 2.功能演示 3、分阶段完成各个功能 3.1 完成服务器和客户端的连接 servic…

【深度学习】图形模型基础(5):线性回归模型第四部分:预测与贝叶斯推断

1.引言 贝叶斯推断超越了传统估计方法,它包含三个关键步骤:结合数据和模型形成后验分布,通过模拟传播不确定性,以及利用先验分布整合额外信息。本文将通过实际案例阐释这些步骤,展示它们在预测和推断中的挑战和应用。…

编程上下文Context及其实现原理

编程上下文Context及其实现原理 author:shengfq date:2024-07-06 title:编程上下文Context及其实现原理 category:编程思想1.编程中的上下文Context是指什么? 在编程和软件工程领域,“上下文”(Context)是一个多义词,其含义可以…

产品经理-​合作的6类干系人(8)

在一个项目中,产品经理并不是一个人在战斗,而是在很多同事的配合下共同完成项目。那产品经理到底要和哪些角色配合,一起完成项目呢 中间的产品经理是一个项目的驱动者。而产品经理的前方是“Boss/Leader”,也就是创业团队中公司的…

地级市数字经济指数、互联网用户数、数字金融普惠指数

2000-2022年地级市数字经济指数(含控制变量) 目录 数字经济如何改善环境污染 一、引言 二、文献综述 三、实证模型 四、数据来源 五、程序代码 六、运行结果 数字经济如何改善环境污染 摘要: 本论文旨在探讨数字经济对环境污染的改善作…

三级_网络技术_04_中小型网络系统总体规划与设计

1.下列关于路由器技术特征的描述中,正确的是()。 吞吐量是指路由器的路由表容量 背板能力决定了路由器的吞吐量 语音、视频业务对延时抖动要求较低 突发处理能力是以最小帧间隔值来衡量的 2.下列关于路由器技术特征的描述中,正确的是()。 路由器的…

Matlab中collectPlaneWave函数的应用

查看文档如下: 可以看出最多5个参数,分别是阵列对象,信号幅度,入射角度,信号频率,光速。 在下面的代码中,我们先创建一个3阵元的阵列,位置为:(-1,0,0&#x…

JavaWeb----JSPJSTL

目录 JSP显隐注释在JSP中写java程序JSP的指令标签JSP中的四大域对象简易版用户登录EL表达式 JSTL条件动作标签if标签 choose\when\otherwise标签迭代标签格式化动作标签 用户登录实例查看是否安装了mysql用户登录界面后台实现 JSP JSP全名是Java Server Pages,它是建…

【后端面试题】【中间件】【NoSQL】MongoDB查询优化3(拆分、嵌入文档,操作系统)

拆分大文档 很常见的一种优化手段,在一些特定的业务场景中,会有一些很大的文档,这些文档有很多字段,而且有一些特定的字段还特别的大。可以考虑拆分这些文档 大文档对MongoDB的性能影响还是很大的,就我个人经验而言&…

常见算法和Lambda

常见算法和Lambda 文章目录 常见算法和Lambda常见算法查找算法基本查找(顺序查找)二分查找/折半查找插值查找斐波那契查找分块查找扩展的分块查找(无规律的数据) 常见排序算法冒泡排序选择排序插入排序快速排序递归快速排序 Array…

在Apache HTTP服务器上配置 TLS加密

安装mod_ssl软件包 [rootlocalhost conf.d]# dnf install mod_ssl -y此时查看监听端口多了一个443端口 自己构造证书 [rootlocalhost conf.d]# cd /etc/pki/tls/certs/ [rootlocalhost certs]# openssl genrsa > jiami.key [rootlocalhost certs]# openssl req -utf8 -n…

Pycharm远程连接GPU(内容:下载安装Pycharm、GPU租借、配置SSH、将代码同步到镜像、命令行操控远程镜像、配置远程GPU解释器)

目录 windows下载安装pycharmGPU租借网站AutoDlfeaturize好易智算 GPU租借GPU选择选择镜像充值 然后创建镜像创建成功 复制SSH登录信息 远程进入镜像 在Pycharm中进行ssh连接新建SFTP配置SSH复制ssh根据复制的信息填写ssh配置测试连接 将代码同步到远程镜像上设置mappings将本地…

React 省市查询组件完整代码

目录 一、地区文件 二、Antd配合使用 三、实现效果 一、地区文件 下载地址:全国省市区数据_JSON格式_SQL格式 export const chinaArea {0: {1: 北京,2: 天津,3: 河北省,4: 山西省,5: 内蒙古自治区,6: 辽宁省,7: 吉林省,8: 黑龙江省,9: 上海,10: 江苏省,11: 浙…

计算机出现找不到msvcp140.dll无法继续执行代码怎么办?推荐7个有效解决方法

在日常使用电脑过程中会经常遇到各式各样的问题,比如msvcp140.dll丢失或找不到msvcp140.dll文件是最常见的问题之一,那么遇到这个问题要怎么解决呢?msvcp140.dll到底是什么?为什么会出现msvcp140.dll丢失问题?今天给大…

原生事件监听及组件内置事件处理

监听事件 我们可以使用 v-on 指令 (简写为 ) 来监听 DOM 事件,并在事件触发时执行对应的 JavaScript。用法:v-on:click“handler” 或 click“handler”。 事件处理器 (handler) 的值可以是: 内联事件处理器:事件被触发时执行的…

《QT从基础到进阶·四十三》QPlugin插件多线程问题和只有插件dll没有头文件和lib文件时调用插件中的方法

1、插件和多线程问题: 创建插件对象不能放到多线程执行,不然报错:ASSERT failure in QWidget: "Widgets must be created in the GUlthread. //不能放在多线程执行 QPluginLoader pluginLoader(pluginsDir.absoluteFilePath(fileName))…