大多数论坛都没有为ID列指定任何默认值。 我想知道他们为什么不这样做。
例如SMF。除了(PRIMARY KEY)ID列之外,它们为每列指定一个默认值。
编辑:我现在看到^这个问题的一部分有点'愚蠢'。
提前致谢。 请记住,我是荷兰人,因此我可能犯了一些错误。
答案 0 :(得分:2)
在大多数情况下,ID列是auto_increment。因此默认值无效。
编辑:
如果您使用值,则'NOT NULL'会抱怨:(类似于$ var ='';在php中)
使用NULL,表示文字NULL
。不是零或空字符串。
答案 1 :(得分:2)
如果我们假设数据库中的id,primary key,column的默认值有意义(甚至有效),请考虑后果:
没有使用'default'的原因是因为,a:首先允许它是没有意义的,而b:它是无效的(尽管b是a的结果)。< / p>
提供默认值是否有性能优势?
与其说是“性能”好处,但它确实意味着如果没有提供任何价值,软件至少会某些想法会发生什么(无论该默认值是字符串,还是号码,枚举......)。
为什么不默认指定空值?
我认为应该控制数据库的所有条目,无论是允许插入的值,还是在发生错误时插入的值,或者用户的失败提供价值。允许对数据库的空条目可能是一个可控的情况,但是当可以指定默认值时,补偿空条目似乎是不必要的复杂。
如果你使用这个值,那么'NOT NULL'会抱怨:(类似于$ var ='';在php中)?
自从我上次使用MySQL以来已经有一段时间了,但null
不 类似于空字符串(以JavaScript评估{{1}的方式要成为'falsy'),绝对没有任何意义。空。整个真空,不存在的信息。然后,''
要求一些(尽管它没有准确指定 )信息。这就是为什么应该提供默认值的原因,因为即使用户没有指定数据,它也会精确指定数据库中的内容。
已编辑以回应OP(下方)的评论:
但是我假设你想要一个数据库抱怨,如果它没有得到,例如,用户名。当然,我不会允许注册字段留空(我确实将它们验证为服务器端),但是如果我没有弄错,那么通过魔术输入到数据库仍然是空的,数据库将接受这个。如果它使用NOT NULL和默认值。那么使用NOT NULL和默认值是什么?
我无法与所有情况或所有数据库/网络管理员做出的选择进行对话,但在我的个人用例中我会说建议考虑:
在某些情况下,我不需要用户的详细信息(例如,他们的性别)对我或我提供的任何服务几乎没有影响,所以我不关心他们是否提供。在这种情况下,不使用默认值。
在其他情况下,例如他们的年龄,它可能会有所不同(我不能记住法律的名称,但我记得有人提到Facebook和其他在线社团,只需要允许13岁的人或更老,参加)。在这种情况下,我要求我的用户说他们实际上已经超过13岁(通过复选框)然后为他们提供输入以插入他们的实际年龄/出生日期。在没有提供数据点的情况下(老实说,除了(假定的)法律义务之外我真的并不关心我的用户多大年纪)我的数据库默认为十三(或者在生日的情况,它默认为13年前今天(尽管有php脚本的帮助)。
现在,NOT NULL
和的方面是默认值?就我所见,没有任何意义。
NOT NULL
的整个概念是确保用户提供的值(否则不会创建记录,并且用户无法加入(或其他)他们正在注册的服务)。默认值是在此缺席时提供后备值。而且,从逻辑上讲,如果两个 允许在同一个字段上一起使用?将在触发NOT NULL
条件之前插入默认值。那么......为什么要这么麻烦?您是否有证据表明某人或某些软件在同一字段上使用两个条件?老实说,我不能认为为什么。