在许多种类的 SQL 中,有三种方式可以在每次插入行时隐式地将列设置为 NULL。它们是:
columnname type NULL
columnname type DEFAULT NULL
columnname type NULL DEFAULT NULL
第一个设置了NULL标志(与NOT NULL相对),第二个将NULL标志保留为默认值,第三个设置了NULL标志并将隐式值设置为NULL。我听说在Microsoft SQL中,第二种变体并不完全相同,因为您还可以自定义表或模式的NULL标志的默认值。
但是对于MySQL而言,我不认为有这样的功能。此外,在MySQL中,具有NULL标志的列(与NOT NULL列不同),即使打开了严格模式,如果没有显式值,插入时始终会被隐式地设置为NULL。因此,所有这些列声明都是相同的。
在我的MySQL脚本中,对于每个NOT NULL列,我都为那些我不希望在应用程序的某些插入中设置的列指定了一个DEFAULT值,以避免在启用严格模式的情况下出现任何问题。因此,即使第三种变体最冗长和明确,我觉得选择它会更对称。像第一种或第二种变体这样的声明是否常见?
我正在考虑倾向于第二种方法,因为那是MySQL dump使用的别名,但我不确定这是否是一个好主意,因为它也将整数字面值作为列声明的默认子句中的字符串(单引号)转储。
这个问题可能看起来更像是一个具有解决方案而不是一个意见问题,但我还想了解我不知道的任何潜在陷阱。我将来可能会从MySQL迁移到PostgreSQL,我也可以使用一些来自那些专家的建议,例如PostgreSQL是否像MS-SQL一样区分这些情况。如果我有任何错误的假设,请纠正我。