zoukankan      html  css  js  c++  java
  • MySQL字段属性NUll的注意点

    MySQL字段属性应该尽量设置为NOT NULL

    除非你有一个很特别的原因去使用 NULL 值,你应该总是让你的字段保持 NOT NULL。这看起来好像有点争议,请往下看。

    空值("") 和 “NULL” 的概念:

       1)空值是不占用空间的
    

      2)MySQL中的NULL其实是占用空间的

    所谓的NULL就是什么都没有,连都没有,在字符串中是结束符,但是在物理内存是占空间的,等于一个字节,而NULL就是连这一个字节都没有。

    NULL不能简单=判断

    其次,在数据库里是严格区分的,任何数跟NULL进行运算都是NULL, 判断值是否等于NULL,不能简单用=,而要用IS NULL关键字。
    可以看一个列子,我创建一个表,字段包括id 和age:

    create table t1(id int , age unique);
    

    然后执行十次:

    insert into t1(id) values(1);
    

    给表只添加id,age字段默认值是NULL,发现可以一直添加,这是为什么呢!,我明明设置了unique属性啊,这就是因为任何数跟NULL进行运算都是NULL, 判断值是否等于NULL,不能简单用=,而要用IS NULL关键字。

    3、not null指是NULL,而不是字符串空值('')

    数据库的字段col1设为NOT NULL, 仅仅说明该字段不能为NULL, 也就是说只有在

    INSERT INTO table1(col1) VALUES(NULL);
    

    这种情况下数据库会报错,而

    INSERT INTO table1(col1) VALUES(‘’);
    

    不会报错。

    (如果字段是自增ID,第一句不会报错,这不能说明是可以为NULL,而是 数据库系统会根据ID设的缺省值填充,或者如果是自增字段就自动加一等缺省操作。)

    4、尽量设置成not null原因

    1、含有空值的列很难进行查询优化,而且对表索引时不会存储NULL值的,所以如果索引的字段可以为NULL,索引的效率会下降很多。因为它们使得索引、索引的统计信息以及比较运算更加复杂。你应该用0、一个特殊的值或者一个空串代替空值。

    2、联表查询的时候,例如LEFT JOIN table2,若没有记录,则查找出的table2字段都是null。假如table2有些字段本身可以是null,那么除非把table2中not null的字段查出来,否则就难以区分到底是没有关联记录还是其他情况

  • 相关阅读:
    RMI几种公布和引用服务的方式
    mysql 多日志表结果集合拼接存储过程
    USRP通信的结构体和常量(上位机、下位机共用)
    Flash Builder4破解步骤
    leetcode 217 Contains Duplicate 数组中是否有反复的数字
    关于权限表的基本设计
    Objective-C之成魔之路【7-类、对象和方法】
    vs2008C1902程序数据库管理不匹配
    配置hadoop集群一
    BZOJ 2338 HNOI2011 数矩形 计算几何
  • 原文地址:https://www.cnblogs.com/Kingfan1993/p/9974101.html
Copyright © 2011-2022 走看看