MySQL列属性最好为NOT NULL的原因

MySQL列属性最好为NOT NULL的原因

【引言】

博主之前一直在数据库列属性这边有一个疑问,为什么别人的SQL结构里面的列属性总是默认为 NOT NULL,直至今天终于知道了原因,故此文便是对列属性不能为空的记录。

【原因】

在 MYSQL 中 NULL 和 空值 占用存储空间的区别:

我们平时所理解的 NULL 就是什么都没有的意思,但在我们的 MYSQL 中 NULL 是占用空间的。而空值与 NULL 不一样,它在 MYSQL 中是不占用空间的。 简单的来说,NULL在MYSQL中是存在的,而空值就不存在了。

下面是来自MYSQL官方的说辞:

NULL columns require additional space in the row to record whether their values are NULL. For MyISAM tables, each NULL column takes one bit extra, rounded up to the nearest byte.

翻译一下就是:

NULL列在行中需要额外的空间来记录其值是否为NULL。对于MyISAM表,每个NULL列都多花一位,四舍五入到最接近的字节。

另外,在 MYSQL 中,含有 NULL的值很难进行查询优化,而且对表进行索引的时候不会存储 NULL 值,如果含有索引的列有 NULL 值时,索引的查询效果会下降很多,建议使用其他的值代替 NULL。

如果不指定列字段为 NOT NULL 那么该列讲默认为 NULL , 上述我们提到了使用 NULL的坏处。所以,我们应该避免使用 NULL,转而在创建字段时使用 NOT NULL 强制约束列不接受 NULL 值。

【示例】

create table ql(
    id int(11) primary key auto_increment NOT NULL,
    at int(10) unique NOT NULL,
    pw char(16) NOT NULL,
    ph int(11) NOT NULL
);

另外我记录一下我自己的观点,为了查询的效率,我一般是遵循这个些原则。

0.索引一定要设置给正确字段。

1.能用两个字母的数据库名,表名或者字段名代替的,就一定不要超过两个字母。

2.能尽量使用 int 数据类型字段的字段就避免使用其他数据类型字段。

3.能不用text或者占用大量位的数据类型字段就不用,如果确实需要使用建议建立创建一个表关联并单独存放。

4.能用char就别用varchar。


回复列表



回复操作

正在加载验证码......

请先拖动验证码到相应位置

发布时间:2020-03-23 18:13:34

修改时间:2020-03-23 18:48:32

查看次数:71

评论次数:0