如何将NULL列转换成为NOT NULL列

 
   | |

导读:本文回答了如何将NULL列转换成为NOT NULL列的问题。

关键词:Oracle Oracle SQL NULL NOT NULL

正在加载数据... 【TechTarget中国原创】我已经将一个列修改成为非null列。我对这个表进行了备份,删去了以前修改过的列。现在我怎样才能登录这个表?答:这个问题提得很好。它涉及到了很多的问题。首先,也是最重要的一点就是如果你要还原备份你就要测试会发生什么。

【TechTarget中国原创】:我已经将一个列修改成为非null列。我对这个表进行了备份,删去了以前修改过的列。现在我怎样才能登录这个表?

  答:这个问题提得很好。它涉及到了很多的问题。首先,也是最重要的一点就是如果你要还原备份你就要测试会发生什么。

  通过将NULL列转换成为NOT NULL列,你会想确保每个行都有一个值。但是这个表里肯定有一些列包含了NULL值。

  在你创建备份时,含NULL值的一些列也同样进行了备份。你接下来要做的就是删除这个表,删掉现在所有的行,并且将列转换为NOT NULL。但是你现在不能还原备份,因为所有含有NULL值的行都被拒了。

  这里就牵涉到如何解决这个问题。一个很显然的答案就是在创建备份之前将这些 NULL值转换成其他值。


UPDATE table
       SET column = 'shazam'
     WHERE column IS NULL

  注意你如果执行完了以上的任务,用一个真实值代替了该列中的每个NULL值,你就可以很安全地创建备份、删除表、将 NULL转换成NOT NULL、最后还原备份。

  实际上,一旦你已经将所有的NULL值更新为实际值,你就可以尝试将该列从NULL转换为NOT NULL,不需要进行备份。数据库系统当然会检查整个表,但是既然没有了NULL值,那这些数据就会发生转换。

  但是,它还会引起更深层次的问题:你是否能够真正拿出一个“magic value”进行转换。例如,我看见许多人将NULL值转为0个字节(字节长度为零),甚至用这个值定义该列的默认值:

 

CREATE TABLE (
    ... column VARCHAR(37) NOT NULL DEFAULT ''

  在我看来,这实际上是一个设计错误。比下面的操作还要差:


 CREATE TABLE (
    ... 
    , column VARCHAR(37) NOT NULL DEFAULT 'shazam'
    ... )

  用空字符串代替NULL引起的自身的问题,我们在这里就不进行探讨了。有 "magic value"实际上也就是表示它并不是一个实际值,而是一个特殊值。但在我看来仍然是错误的。但是,如果你找到了能够将NULL值进行转换的实际值,那就转换吧!

 
查看全文
 
 
 
 
 

Oracle SQL

 
Oracle Application Express(Oracle APEX)设计的一个主要目标是:快速构建基于Oracle数据库的Web应用程序。
 
SELECT子句通常是一个SELECT语句的第一个子句。它标识出你所想要包含到结果集中的列。这些列是从在FROM子句中指定的基表中返回的。
 
没有ORDER BY子句,Oracle不会保证行显示的顺序。它们可能是按照你想要的顺序排列,但也可能不是。
 
Toad For Oracle的产品策略就是为Oracle开发一款工具,它可以满足不同人的不同需求,比如DBA、开发人员、分析师以及管理者等等。
 
据Toad For Oracle产品经理John Pocknell所说,这次发布的Toad 10致力于生产力的概念,其中包括了:灵活性、易用性、自动化和协作等内容。
 

登录TechTarget中国

关闭
本服务仅向TechTarget中国的会员开放,请登录或立即免费注册
电子邮件地址:
请输入您的电子邮件地址
密码:
下次自动登录