我在Oracle SQL数据库中有两列。这两列的data_default为'0000'
在sqldeveloper上,它们看起来如下所示:
我想删除data_default(不要问为什么要在nullable = No列中这样做)并达到以下状态:
我尝试了以下查询:ALTER TABLE table_name MODIFY column_name DEFAULT NULL
但我得到的结果看起来是这样的:
所以有两个问题:
1.(null)和NULL(如果有)之间有什么区别?
1.是否有办法达到所需的状态?
1条答案
按热度按时间8ulbf1ek1#
前两个图像中的
(null)
是SQL Developer显示的真空值的虚拟值,因此您可以看到一些内容。如果转到“工具”-〉“首选项”-〉“数据库”-〉“高级”,则会有一个“将空值显示为”的选项,该选项将设置为“(null)"。如果将其更改为其他值,则该值将显示在查询输出中。在第三个图像中,
data_default
值实际上不是null,它是(长)字符串值'NULL'
。如果你从来没有为一列设置过默认值,那么
data_default
实际上是空的,但是如果你设置了它,然后试图取消设置它,那么它不会恢复为一个真正的空值,它将保留为你为修改提供的任何值,就像你提供的一样--包括大小写。你将它设置为NULL
,所以它显示为NULL
;如果将其修改为null
,则会显示null
。这并不重要。实际上,当您执行插入操作并省略该列时,
data_default
的值将嵌入到语句中。它实际执行的操作可能要复杂得多,但您可以将其视为动态SQL,它将转换为:至
所以就算最后变成
或
或
在您将它改回null之前,它实际上已经转换为:
如果创建一个表,其中的列没有默认值,然后设置一个默认值,再将其设置为空,则会出现这种情况:
第一个
| 数据行名称|数据类型|数据默认值|
| - -|- -|- -|
| 识别码|编号| * 空值 *|
| 数据行名称|变量2| * 空值 *|
第一个
| 数据行名称|数据类型|数据默认值|
| - -|- -|- -|
| 识别码|编号| * 空值 *|
| 数据行名称|变量2|“0000”|
第一个
| 数据行名称|数据类型|数据默认值|
| - -|- -|- -|
| 识别码|编号| * 空值 *|
| 数据行名称|变量2|无|
第一个
| 识别码|数据行名称|
| - -|- -|
| 一个| * 空值 *|
| 2个|千|
| 三个| * 空值 *|
fiddle
当没有默认值和存在空默认值时,实际的默认值是真空值(在db〈〉fiddle中以斜体显示,而不是“(null)”)。
因此,在第二个映像中显示“(null)”和在第三个映像中显示“NULL”之间没有实际区别。这只是设置和恢复的值以及Oracle处理和记录该值的方式的假象。它不会影响稍后插入到表中的数据。