首页 > 数据库 >快速理解MySQL null的10大坑

快速理解MySQL null的10大坑

时间:2024-05-19 15:40:59浏览次数:26  
标签:10 false 值会 field MySQL null where

创建表时应当设置not null,添加一个默认值0或''去替代null。

sum('field')的坑

若一列的所有值都是null,那么sum函数的结果不是0,而是null,所以可能会因为值的类型兼容问题,出现意料之外的情况。
null值会有NPE问题。

count('field')的坑

有null的列,count不会+1。

where('field')的坑

null是没有设置值的一种状态,并不是某个值,若用where field = null, where field = '', where field = false, where field = true,都无法匹配。
需要使用where field is null,where field <=> null来匹配。

group by('field')的坑

null值会被自动归类为一类,某些场景下,可能不适用。

order by('field')的坑

null值会被视为最小值,放在0的前方,某些场景下,可能不适用。

distinct('field')的坑

有null的值,也会被去重,某些场景下,可能不适用。

null相关运算的坑

null值与任何数据进行四则运算或者大于小于等于不等于的运算,都返回null,某些场景下,可能不适用。

导入数据的坑

若两个MySQL环境或配置不一样,A设备导出的数据,B设备导入,可能会因为null值所在的字段缺少值从而报错。

外键的坑

在 MySQL 中,如果使用了外键约束,并且外键列允许 NULL 值,那么当引用的列中出现 NULL 值时,可能会导致一些意想不到的行为,如无法正确匹配行或者导致级联更新或删除的问题。

结果兼容性的坑

对于静态强类型语言,可能类型上会不兼容。
对于动态若类型的语言,null,0,false,'',都是false,可能会影响一些逻辑。

对唯一索引的影响

null值会导致数据有多个相同的null值,破坏了唯一性约束。

对索引的影响

有的说null值就不走索引,经过实测,就算全是null值,也显示的Using index。

标签:10,false,值会,field,MySQL,null,where
From: https://www.cnblogs.com/phpphp/p/18200398

相关文章

  • mysql 统一修改字符集和字段属性
    --修改表字符集SELECTCONCAT("ALTERTABLE`",TABLE_NAME,"`CONVERTTOCHARACTERSETutf8mb4COLLATEutf8mb4_general_ci;")AStarget_tablesFROMINFORMATION_SCHEMA.TABLESWHERETABLE_SCHEMA="uat-zpg"ANDTABLE_TYPE="BASETABLE&q......
  • MySQL的索引优化
    一、索引的使用场景1、全值匹配通过主键索引查询mysql>explainselect*fromt_goodswhereid=1\G;***************************1.row***************************id:1select_type:SIMPLEtable:t_goodspartitions:NULLtyp......
  • java+mybatis+easyExcel快速导入excel数据到MySQL
    这里有一些数据需要导入数据库。demo地址:importExcel使用步骤如下:一、修改database相关内容 1.修改application.properties文件中数据库地址及信息二、新建实体类1.新建excel数据所符合的实体类,这里举例Excel中有如下数据,表头字段为“username”。数据......
  • Mysql新建日历表
    新建最近几十年的天 CREATETABLEifnotexistscalendar(account_daydate);INSERTINTOcalendar(account_day)SELECTDATE_ADD('2024-01-01',INTERVALnDAY)FROM(SELECTa.N+b.N*10+c.N*100+d.N*1000ASnFROM(SELECT0ASNUNIONSELECT1......
  • Windows10 子系统 WSL 位置迁移问题_wsl --import 未指定的错误
    CSDN搬家失败,手动导出markdown后再导入博客园最近想体验下世界上最好的Linux发行版Win10(bushi),拿来深度学习炼丹,所以参考了在WSL2中使用CUDA提到的方法安装。列举下遇到的问题:1Windows预览版本没响应按理说在设置-更新和安全-Windows预览体验计划里面注册后,就......
  • P4171 [JSOI2010] 满汉全席 2-SAT
    P4171[JSOI2010]满汉全席2-SAT题目链接思路:2-SAT模板题,我们将满席定为1,汉席定为0.那么建边即可。判断同一道菜满汉是否在强联通分量中即可。注意多测清空!!!代码:vector<int>e[N];stack<int>stk;intdfn[N],low[N],tot;intinstk[N],scc[N],siz[N],cnt;intn,m;void......
  • 10046 event
    转自:https://www.cnblogs.com/dbabd/p/10319479.html#autoid-3-0-01.前言作为SQLTrace的扩展功能,Oracle10046event(10046事件)是一个重要的调试事件,也可以说是系统性能分析时最重要的一个事件,它包含比SQLTrace更多的信息。但可惜的是,10046事件并不是Oracle官方提供给用户的......
  • MySQL精度问题-hekui
    一、MySQL中datetime类型怎么处理毫秒MySQL中datetime日期类型,默认是精确到秒的。从MySQL5.6.4版本开始,可以设置精度,如datetime(3)表示精确到毫秒类型说明插入时赋值DB实际存储datetime(0)或datetime精确到秒2024-05-1900:00:00:4992024-05-1900:00:00:500202......
  • mysql5.7 报错:[ERROR] InnoDB: Ignoring the redo log due to missing MLOG_CHECKPOIN
    mysql5.7启动报错:2024-05-19T02:02:14.453082Z0[Warning]TIMESTAMPwithimplicitDEFAULTvalueisdeprecated.Pleaseuse--explicit_defaults_for_timestampserveroption(seedocumentationformoredetails).2024-05-19T02:02:14.453139Z0[Note]--secure-file......
  • (10)uart串口通信
    一、uart简介  二、uart串口通信实验 其中:sys_clk为系统时钟。uart_rxd为串口从上位机接收到的数据,当检测到uart_rxd出现下降沿(起始位),start_flag产生正向脉冲,rx_flag也被拉高,clk_cnt为时钟计数器,由0计数到433,rx_cnt为接收数据计数器,当计数到第九位且......