MySQL列应该总是有默认值?
答
如果您将其指定为NOT NULL,那么您应该有一个默认值,除非您控制输入的数据。 NOT NULL意味着总会有一个值,所以有一个默认值是很好的做法。你所有的列都需要不是NULL吗?
答
不!默认值在您需要时使用,但不会设置不影响性能!
答
在mysql列上总是有默认值的最佳做法是什么?
NO
这要看。
如果你想确保输入合理的数据,那么你应该而不是设置not null
列的默认值。
仅为具有合理默认值的列设置默认值。
如果你能脱身null
只允许null
。
这会提高性能吗?
它减慢插入有点。
但是它可以加快你的选择,因为你不必测试null。
当然,DB花费少量时间来设置默认值。
除非你批量插入,否则你不会注意到任何延迟。
答
性能
插入理论上,应该更快使用,而不是每一个都值发送默认值。事实上,性能差异非常小,您无法衡量它。
一般:使用NOT NULL比使用NULL值工作更快。特别是索引结构如果不需要处理Null值,则工作得更快。
如果使用NOT NULL 使用默认值
最佳实践
在现实世界中,你应该做的,你渴望拥有的一个结果是什么。
- 使用NULL值,如果你想保留的信息:“我不知道真正的价值”
使用默认值,如果你不在乎,如果你知道真正的价值,但你想以确保至少存在默认值。
如果使用NOT NULL,请始终使用DEFAULT。
例子
生日:不要使用NULL为这些用户值,你不知道生日。
isDisabled:请勿使用NULL,而应将默认值设置为0;所以如果没有设置,用户不会被禁用。你决定,所以你不需要NULL。
这不是普遍适用的。说一个列对于可空或者具有默认值总是有好处是不对的。例如,主键字段将不是NULL,但您当然不会设置默认值。例如,您也不会将用户名字段设为默认值。 – Hammerite
@Hammerite我同意你不想为这些项目设置默认值,但在这种情况下,你将控制前端的验证输入值。如果您的输入验证不为空,那么您不需要默认值。但是如果你没有进行验证并且没有默认值,并且有人试图输入一个空值,那么会发生SQLException,这是不好的做法。真的,你不应该把所有的列设置为NOT NULL,除非它真的有必要。 – Robert