mysql 字段设计,尽量设置不允许为null
一、总结
一句话总结:
如果字段加了索引,或者以后有可能会加索引,对于 MySQL的字段来说,应该是不能null的 ,不仅仅是【效率和性能】问题,而且还有着【查询的巨坑】的。
二、mysql 字段设计,尽量设置不允许为null
其实 从 个人的角度来看,, 都无所谓,,为了麻烦,有时候 都是 默认可以为 null 的 。 但是看了一些 文章,说 如果 字段 加了索引,或者 以后 有可能会 加索引,, 对于 MySQL 的 字段来说, 应该是 不能 null 的 ,不仅仅是 效率 和性能问题,,,而且 还有着 查询的 巨坑的。
注意:MySQL字段尽量避免NULL,应该指定列为NOT NULL,除非你想存储NULL。在MySQL中,含有空值的列很难进行查询优化,而且对表索引时不会存储NULL值的,所以如果索引的字段可以为NULL,索引的效率会下降很多。因为它们使得索引、索引的统计信息以及比较运算更加复杂。你应该用0、一个特殊的值或者一个空串代替空值。 本文永久地址:http://blog.it985.com/12398.html
参考地址: http://blog.csdn.net/qingfenglu/article/details/48022837
允许为null 的 列,查询有潜在 大坑。 单列索引不存 null 值,复合索引 不存全为 null 的值,如果 列 允许为null ,可能会得到 "不符合预期" 的结果集:
例子:
select * from user where name!='xxxa'
如果name 允许 为 null , 加了索引, 索引不存储 为 null 的值 ,结果 集中不会包含 这些记录的
但是呢,,,如果字段设置了不为 null,而且有默认值。。。 那么在开发端呢,就会比较麻烦了。。。 特别是 一些 DAO的框架或者 jdbc的工具类,,会把 一些 table entity 实体,,没有值得属性,调用 save 方法的时候, 将该值 设置为 null ,来进行插入,如果字段设置了不能为null ,,,那么就会插不进去了。。。 当然如果我们可以 改改 save的方法,,判断如果没有值得话,,就忽略掉,,,那当然是好事了。。。 可是有时候 往往 没有改的权利,或者不好动。。怕出问题,特别是一些 大的老的项目。。。