MySQL列是否具有默认的空样式选择?

在许多类型的SQL中,有三种方法可以在每次插入行时将列隐式设置为NULL。这些是:

列名称类型为空
columnname类型默认为空
columnname类型为NULL默认为NULL

即,第一个设置NULL标志(与NOTNULL相反),第二个将NULL标志保留为默认值,第三个设置NULL标志并将隐式值设置为NULL

我听说过在Microsoft SQL中,第二种变体是如何不完全相同的,因为您还可以自定义表或模式的NULL标志的默认值

但是对于MySQL,我不相信有这样的特性。此外,在MySQL中,与NOTNULL列不同,如果并没有显式值,则带有NULL标志的列在insert时总是隐式设置为NULL,即使启用了严格模式也是如此。因此,所有这些列声明都是相同的

在我的MySQL脚本中,对于每个NOTNULL列,我为我不希望在应用程序的某些插入中设置的列指定一个默认值,以避免在启用严格模式时出现任何问题。因此,我觉得如果我选择第三种变体,它会更加对称,即使它是最冗长和明确的。像第三个变体这样的声明是常见的,还是第一个或第二个变体在其他脚本中出现得更频繁

我考虑采用第二种方法,因为这是MySQL dump使用的别名,但我不确定这是否是一个好主意,因为它还将整数文本作为字符串(单引号)转储到列声明的默认子句中

这个问题可能看起来比一个有解决方案的问题更像是一个观点,但我也想知道我没有意识到的任何潜在问题。我将来可能会选择从MySQL迁移到PostgreSQL,我也可以从那些专家那里得到一些建议,例如,PostgreSQL是否能像MS-SQL那样区分这些情况。如果我做了错误的假设,请纠正我

如数据类型默认值下所述:

如果列可以采用NULL作为值,则该列将使用显式defaultnull子句定义

(我想他们的意思是隐式的,而不是显式的)

此外,如CREATE TABLE语法中所述:

如果既没有指定NULL也没有指定notnull,则该列将被视为已指定NULL

因此,在MySQL中,以下列定义都是相同的:

列名称类型
columnname类型为空
columnname类型默认为空
columnname类型为NULL默认为NULL

选择使用哪种语言是明确和简洁之间的平衡。视情况而定,我可能会使用上述任何一种

发表评论