zoukankan      html  css  js  c++  java
  • 关于一个值该不该default null的判定

    背景:

    设置了一个用户表 talent 列有学历ID、学历、姓名,请问我的学历ID是设置 int not null default 0 合适呢还是 int default null 合适呢?

    参考:

    《高性能MySQL》 - 尽量避免使用null:

    a.  可为null值的列使得索引更加复杂,因为可为 null 值的列被索引,每个索引记录需要一个额外的字节  -- 我们不关注,多一个就多一个不差那点内存

    b.  可为 null 值的列的值比较更为复杂,因为null值只能通过 is null 获取,对于 != 1 之类,null值也无法获取

      理解:我们本能的认为 null != 1 返回的是 true,所以我们 column != 1应该能获取到 column is null 的行记录才对,但是事实上:

               MySQL 执行  select if(null != 1,'true','false');  返回值是 false ; 也就是说 在MySQL之中与任何值的比较(即使是null)永远都不会为“真” - 《MySQL DBA修炼之道》

          

    c  使用聚合函数时候,count,min,sum将忽略null值 ,例如

    select count(degree_id) from user; //如果有一行的degreee_id为null那么将不会计算这一行进去
    
    select count(*) from user;//这个则直接计数行为不是单独的列值

    所以对于总数的计数不能依赖于一列可以为 null 的列

    d 对于timestamp的列,如果插入null值将会插入当前日期和时间;

    e 对于auto_increment的列插入null值将会插入序列中的下一个编号;

    其实以上,我们总结不用 null 的最大原因还是:值比较变得麻烦

    例子:

     

    1 查找不方便,比如我们想查找非本科学历(ID 值为5)的候选人, 

    select id,chnname,highdegree_id,highdegree_name from zp_talent where highdegree_id != 5 and id=460;

    对于未填写学历的人比如 null 值我们无法获取,只能通过 is null 获取

    但是本人使用 element ui开发,下拉框组件看到值为 0 的时候,会显示一个 0 值在输入框里面,显得很奇怪 ,所以我需要人工转一道:如果学历ID为0就转为空字符串;

    而 default null 却不会有这样的烦恼;

    I can see a bigger world.
  • 相关阅读:
    树莓派.安装Firefox浏览器
    树莓派.Raspberry Pi 3碰到"Unable to determine hardware version. I see: Hardware : BCM2835"错误的解决过程
    Linux.Centos6编译安装nginx
    树莓派.桌面分辨率设置
    [转]树莓派.设置自动重连WiFi
    树莓派.系统.官方下载中NOOBS和Raspbian的区别
    树莓派.设置无线网卡为AP工作模式(pi2和pi3)
    Nodejs.调用Linux命令
    树莓派.屏幕休眠控制
    GO语言.树莓派.环境安装和测试
  • 原文地址:https://www.cnblogs.com/xuweiqiang/p/14687566.html
Copyright © 2011-2022 走看看