【问题标题】:MySQL, AUTO_INCREMENT, and NOT NULLMySQL、AUTO_INCREMENT 和 NOT NULL
【发布时间】:2015-04-30 11:35:23
【问题描述】:

在 MySQL 表中,显然可以将 INT 设置为 NOT NULL 和 AUTO_INCREMENT,但是当它们一起工作时,当你有后者​​时,前者真的有必要吗?

除此之外,删除 NOT NULL 是否有任何性能、内存、存储或速度奖励?

【问题讨论】:

标签: mysql sql auto-increment notnull


【解决方案1】:

作为一个好的设计,如果一个列需要一个值才能正常工作,它应该被声明为 NOT NULL。

也就是说,实际上,将自动增量列声明为可为空意味着您可以将空值显式传递给它,并且仍然会为该列生成一个值。

http://dev.mysql.com/doc/refman/5.7/en/example-auto-increment.html

在提高效率和空间方面,最好将列设为UNSIGNED,因为它永远不会取负值,并且使用与表大小保持同步的最小数据类型。

根据定义,所有列约束都会对性能造成一些损失,因为服务器必须将资源用于存储和检查约束。

但这是微不足道的,尤其是对于检查空值之类的例行程序,而且,如果它在您的记录中强制执行有效性,那么它是值得的。

【讨论】:

  • 我想我应该指定这是主键,命名为id,所以它显然是无符号的。在我的代码中,所有对表的插入都会忽略 id。所以总而言之,我应该把它留在那里,以防万一?
  • 我最好的建议是,如果一个列需要保存有效数据,它应该有一个 NOT NULL 约束,就像最佳实践一样。
猜你喜欢
  • 1970-01-01
  • 2014-12-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-11
  • 2020-03-22
  • 1970-01-01
  • 1970-01-01
  • 2011-03-04
相关资源
最近更新 更多