MySQL、AUTO_INCREMENT 和 NOT NULL
MySQL, AUTO_INCREMENT, and NOT NULL
在 MySQL table 中,您显然可以将 INT 设置为 NOT NULL 和 AUTO_INCREMENT,但是当它们一起工作时,前者真的有必要吗?后者?
除此之外,删除 NOT NULL 是否有任何性能、内存、存储或速度奖励?
作为良好的设计,如果列需要一个值才能正常运行,则应将其声明为 NOT NULL。
也就是说,实际上,将自动增量列声明为可为 null 意味着您可以显式将 null 值传递给它,并且仍然会为该列生成一个值。
http://dev.mysql.com/doc/refman/5.7/en/example-auto-increment.html
在提高效率和space方面,最好使列UNSIGNED,因为它永远不会取负值,并使用与[=24同步的最小数据类型=]的尺寸。
根据定义,所有列约束都会对性能造成一定的影响,因为服务器必须投入资源来存储和检查约束。
但这微不足道,特别是对于检查空值之类的常规操作,而且,如果它在您的记录中强制执行有效性,那么这笔费用是值得的。
在 MySQL table 中,您显然可以将 INT 设置为 NOT NULL 和 AUTO_INCREMENT,但是当它们一起工作时,前者真的有必要吗?后者?
除此之外,删除 NOT NULL 是否有任何性能、内存、存储或速度奖励?
作为良好的设计,如果列需要一个值才能正常运行,则应将其声明为 NOT NULL。
也就是说,实际上,将自动增量列声明为可为 null 意味着您可以显式将 null 值传递给它,并且仍然会为该列生成一个值。
http://dev.mysql.com/doc/refman/5.7/en/example-auto-increment.html
在提高效率和space方面,最好使列UNSIGNED,因为它永远不会取负值,并使用与[=24同步的最小数据类型=]的尺寸。
根据定义,所有列约束都会对性能造成一定的影响,因为服务器必须投入资源来存储和检查约束。
但这微不足道,特别是对于检查空值之类的常规操作,而且,如果它在您的记录中强制执行有效性,那么这笔费用是值得的。