在sql数据库列中,空字段将被设置为NULL
,除非我们使用NOT NULL
指定它。使用一个而不是另一个的优点是什么?谢谢!NULL与NOT NULL
回答
如果您需要在列中表示未知数据,则可以为空。如果你将永远在列数据,这是更好地使之不为空,因为
- 与空处理,可恼人的和违反直觉
- 它可以节省一点空间
- 在某些数据库系统,空值不被编入索引。
这可能与OP有关的进一步阅读:http://www.bennadel.com/blog/85-Why-NULL-Values-Should-Not-Be-Used-in-a-Database-Unless-Required.htm – kush
节省空间?我不确定这是否有效。参见[上一个问题](http://stackoverflow.com/questions/556363/space-used-by-nulls-in-database)和[SQL Server示例](http://sqlfiddle.com/#! 3/3c962/3)。不过,我完全同意你的第一点。 – GarethD
@GarethD,SQL Server中的NULL表使用一种称为NULL位图的表......每8个可为空的列每行一个字节。没有太多空间,但有一些。它将叠加在非常大的桌子上;但它通常不被认为是一个重要的数额。 –
当一个字段设置为NOT NULL时,它不能为空。这意味着您在插入记录时必须为该字段指定一个值。
“NOT NULL”列可以包含“空”值。 –
@Ash:'CHAR'或'VARCHAR'的NOT NULL列是的,它们可以包含空字符串 - 这是一个值。但不是“空值”(不管这意味着什么)。 'INT NOT NULL'不能以任何方式清空(除非你的意思是它的值为'0') –
'NULL'例子:对于'INT'我们有'0';对于'CHAR'或'VARCHAR'我们有'''',什么是空字符串,但仍然是一个值。 @ypercubeᵀᴹ,是吗? –
只是为了阐明你的观点Ö在符合SQL ANSI标准的任何数据库中,没有将空字符串设置为NULL。 NULL与空字符串不同。给定明确的NULL值或无值的列被分配NULL。
这里有一些不使用NULL的优点。您可以节省用于区分NULL值的位的空间。您还可以使报表的含义更明确,例如“字段<>值”。另外,有些数据库在优化诸如“coalesce(field,'')<> value”以使用索引等语句时遇到问题。
有时,需要NULL,特别是当您插入不完整的记录时。而且,因为默认列允许NULL,所以懒惰确保几乎所有数据库中的所有列都接受NULL值。
NOT NULL
义务为该字段指定特定值。
使用NULL
当您需要为该字段保留空值时。
使用NOT NULL
当你想禁止该字段的空值。大多数数据库缓慢运行的额外目标是NULL
-值。所以如果你怀疑使用NOT NULL
。
NOT NULL是一个约束,它确保每列的列中都有一个值。这是当正确应用,因为你必须在做业务的时候要小心,在表空值一样加入,因为没有空等于任何其他空
- 1. != null与= null
- 2. 为null与等于null
- 3. 与NULL连接
- 4. 不WlanFreeMemory()与NULL
- 5. NULL与JOIN - mysql
- 6. NULL与Union
- 7. SED与NULL
- 8. PHP,与Null值
- 9. JSON文件输出为[NULL,NULL,NULL,NULL]
- 10. 样式 - if(null){return}与if(!null)
- 11. ReferenceEquals(null,obj)与null == obj相同吗?
- 12. PropertyInfo.GetValue(null,null)返回null
- 13. json_decode给NULL NULL
- 14. MYSQL - NULL和(null)
- 15. UITextView setText,null null
- 16. PHP与MySQL NULL值
- 17. NULL值与localStorage的
- 18. 检查:null与default()?
- 19. NULL值与外键
- 20. 与NULL值比较
- 21. 返回null与PLINQ
- 22. “BufferedReader.ready”与“while(BufferedReader.readLine()!= null)”
- 23. null == null返回false?
- 24. (obj == null)vs(null == obj)?
- 25. null and not null mysql
- 26. 用null处理null?
- 27. ByteArray to Bitmap null null
- 28. Spring @Autowired bean null null
- 29. Django DateField not null null
- 30. (NULL!= someVariable)OR(someVariable!= NULL)
Ummmm很好的做法....你想确保列的值不为空?然后在该列上设置一个“非空”约束。如果你不在乎,那就不要。 – 2012-06-07 14:17:24
如果你指定一个列为'NOT NULL',那么***不能为空。你的问题是自相矛盾的。 – MatBailie
@Dems:空和NULL是不同的东西;许多rdbms可以将一个NOT NULL字段设置为空字符串0等,所以这不完全准确。 –