问:我已经将一个列修改成为非null列。我对这个表进行了备份,删去了以前修改过的列。现在我怎样才能登录这个表? 答:这个问题提得很好。它涉及到了很多的问题。
首先,也是最重要的一点就是如果你要还原备份你就要测试会发生什么。 通过将NULL列转换成为NOT NULL列,你会想确保每个行都有一个值。但是这个表里肯定有一些列包含了NULL值。 在你创建备份时,含NULL值的一些列也同样进行了备份。
你接下来要做的就是删除这个表,删掉现在所有的行,并且将列转换为NOT NULL。但是你现在不能还原备份,因为所有含有NULL值的行都被拒了。 这里就牵涉到如何解决这个问题。一个很显然的答案就是……
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属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值进行转换的实际值,那就转换吧!
翻译
相关推荐
-
甲骨文自治数据库亮相 带来云计算新希望
早前甲骨文还不在云计算公司之列,而现在该公司正在迅速弥补其失去的时间。甲骨文的云计算核心是甲骨文自治数据库(O […]
-
2017年12月数据库流行度排行榜 定格岁末排名瞬间
数据库知识网站DB-engines最近更新的2017年12月份数据库流行度排名情况是否能提供更多的看点呢?TechTarget数据库网站将与您分享12月份的榜单排名情况,让我们拭目以待。
-
2017年11月数据库流行度排行榜 半数以上数据库积分减少
数据库知识网站DB-engines更新了2016年11月份的数据库流行度排行榜。TechTarget数据库网站将与您一同关注11月份的榜单排名情况。
-
控制合约 不再畏惧Oracle
许多公司都与Oracle有无限制授权协议,他们害怕离开这个协议,所以就证明他们在使用Oracle的软件,即使因为需求单独购买部分授权许可也可能总体是省钱的。