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.
  • 相关阅读:
    BZOJ3129/洛谷P3301方程(SDOI2013)容斥原理+扩展Lucas定理
    Dilworth定理
    字符串
    hash
    李超线段树(segment[HEOI2013]-洛谷T4097)
    连通数[JSOI2010]-洛谷T4306
    主席树
    splay
    树链剖分
    受欢迎的奶牛-洛谷2341
  • 原文地址:https://www.cnblogs.com/xuweiqiang/p/14687566.html
Copyright © 2011-2022 走看看