在 MySQL 表中,显然您可以将 INT 设置为 NOT NULL 和 AUTO_INCRMENT,但是虽然它们一起工作,但当您拥有后者时,前者真的有必要吗?
除此之外,删除 NOT NULL 是否有任何性能、内存、存储或速度优势?
最佳答案
作为良好设计的问题,如果列需要一个值才能正常运行,则应将其声明为 NOT NULL。
也就是说,实际上,将自动增量列声明为可为空意味着您可以显式向其传递空值,并且仍然获得为该列生成的值。
http://dev.mysql.com/doc/refman/5.7/en/example-auto-increment.html
就提高效率和空间而言,最好将列设置为 UNSIGNED,因为它永远不会取负值,并使用与表大小保持同步的最小数据类型。
根据定义,所有列约束都会对性能造成一些损失,因为服务器必须投入资源来存储和检查约束。
但是这是微不足道的,特别是对于像检查空值这样的例行程序,而且,如果它强制记录中的有效性,那么这是值得的。
关于MySQL、AUTO_INCRMENT 和 NOT NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28770454/