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

日期: 2009-02-02 作者:Rudy Limeback翻译:April 来源:TechTarget中国 英文

问:我已经将一个列修改成为非null列。我对这个表进行了备份,删去了以前修改过的列。现在我怎样才能登录这个表?   答:这个问题提得很好。它涉及到了很多的问题。

首先,也是最重要的一点就是如果你要还原备份你就要测试会发生什么。   通过将NULL列转换成为NOT NULL列,你会想确保每个行都有一个值。但是这个表里肯定有一些列包含了NULL值。   在你创建备份时,含NULL值的一些列也同样进行了备份。

你接下来要做的就是删除这个表,删掉现在所有的行,并且将列转换为NOT NULL。但是你现在不能还原备份,因为所有含有NULL值的行都被拒了。   这里就牵涉到如何解决这个问题。一个很显然的答案就是……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

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值进行转换的实际值,那就转换吧!

翻译

April
April

相关推荐