当前位置: 首页 > 面试题库 >

带有DEFAULT NULL的MySQL列-风格选择,还是它?

艾学海
2023-03-14
问题内容

在许多类型的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转储使用的别名,但是我不确定这是一个好主意,因为它还会在列声明的默认子句中将整数文字作为字符串(单引号)进行转储。

这个问题似乎比具有解决方案的问题更吸引人,但我也想知道我不知道的任何潜在陷阱。将来我可能会选择从MySQL迁移到PostgreSQL,也可以使用这些专家的一些建议,例如PostgreSQL是否像MS-
SQL一样区分这些情况。如果我做错了任何假设,请纠正我。


问题答案:

我遇到的每个数据库都会以描述它们的方式对待NULL。当列接受NULL值时,如果不在INSERT上提供值,则该值默认为NULL。我相信这是ANSI标准行为的一部分。

至于指定“ NULL”本身。这是一个优先事项。该标准确实说, 除非 指定了NOT NULL(在数据定义语言的级别), 否则 列允许NULL
。因此,NULL本身是不必要的,并且您有第四个等效的选项:

columnname type

NULL通过ANSI标准完全嵌入到SQL语言中。您的第三个选项是最明确的,但它看起来也有点不寻常。

如果您打算在整个系统中保持高度一致,那么我会走自己的路。对于每个表中的每一列,请具有NULL或NOT
NULL。对于所有采用默认值的列,请使用DEFAULT语句。

但是,不要指望与您一起工作的其他人(现在或将来)会很容易地遵循此示例。在这种情况下,许多人更喜欢第四个选项,因为它只需要较少的输入,并且是所有(或几乎所有)SQL语言的行为方式。



 类似资料:
  • 问题内容: 我正在一个项目中,另一个开发人员创建了一个表,该表的列名为。那是两个词之间的空格。如果我使用“企业名称” 运行语句,则说没有名称为“企业”的列。 我怎么解决这个问题? 问题答案: 通常,第一步是首先不要这样做,但如果已经完成,则需要诉诸正确的列名引用: 通常,这类事情是由使用Microsoft Access之类的人创建的,并且总是使用GUI来做他们的事情。

  • 本文向大家介绍MySQL 选择所有列(*),包括了MySQL 选择所有列(*)的使用技巧和注意事项,需要的朋友参考一下 示例 询问 结果 您可以通过执行以下操作从一个连接的一个表中选择所有列: 最佳实践*除非正在调试或获取row(s)关联数组,否则不要使用,否则架构更改(ADD / DROP /重新排列列)可能会导致讨厌的应用程序错误。另外,如果提供结果集中所需的列列表,MySQL的查询计划程序通

  • 问题内容: 我正在尝试将其编译。.我有一个带有firstname和lastname字段的表,并且我有一个字符串,例如“ Bob Jones”或“ Bob Michael Jones”等。 事实是,例如,我的名字有鲍勃,姓氏有迈克尔·琼斯 所以我想 但是它说未知列“ firstlast” ..有人可以帮助吗? 问题答案: 您提供的别名用于查询的输出-在查询本身中不可用。 您可以重复表达: 或包装查询

  • 尝试获取本页表格中的单个行:http://www.flashscore.com/match/n77wzKlQ/#match-summary 这是我目前掌握的代码...不起作用,因为类名有空格。我尝试过用。但是仍然没有运气。 代码:

  • 问题内容: 我的问题的示例架构在SQLFiddle中给出,如下所示: 在在线游戏中,我想选择对手,该对手可以在玩家或中。 所需的示例输入/输出 也就是说,所需的数据可以在任何列中,但是我需要有条件地或以任何其他方式在单列中输出。我听说过MySQL条件列,但无法创建查询以获取所需的输出。有人可以帮助您进行必要的查询吗? 编辑 基于此链接,我运行以下查询,但失败。 问题答案: 我认为您可以使用以下语法

  • 早在使用 Docker 之前就听说与其前辈 Vagrant 之前的竞争与替代,但是一直没能够 真正认识到两者之间的区别和优缺点,这次腾出时间使用 Vagrant 终于对它们之间的优缺点 有了更深的认识。 埋头苦干一直不是我的风格,所以在比较 Vagrant 安装、下载期间细细阅读了多篇相关文章, 其中当然少不了 Vagrant 和 Docker 作者在 StackOverflow 上的亲自解惑(中