【问题标题】:How can I update the value of a specific field of my table for all rows?如何更新表中所有行的特定字段的值?
【发布时间】:2015-03-11 07:05:04
【问题描述】:

我是 SQL 的新手,尤其是 Oracle DB,我对如何更新表的所有记录的特定单个字段值有些疑问。

因此,在 Oracle 数据库中,我有一个名为 PROJECT_INFO_STATUS 的非常简单的表,其格式如下:

ID  STATUS
-------------
0   Closed
1   Active
2   Testing
3   Starting

正如您在之前的 sn-p 中看到的,该表只有 2 个字段:一个 ID(一个 NUMBER)和一个 STATUS (一个VARCHAR)。

如何更新所有行以使 ID 值为 旧 ID 值 + 1

例如,第一行的 ID 值 (STATUS=Closed) 必须为 1(而不是 0)。第二行的 ID 值 (**STATUS=Active) 必须为 2(而不是 1)。以此类推。

如何才能获得这种行为?

【问题讨论】:

  • id 是主键还是对另一个表的引用?

标签: sql database oracle oracle10g oracle-sqldeveloper


【解决方案1】:

只需将列值设置为自身加一:

update project_info_status set id = id + 1;

select * from project_info_status;

        ID STATUS    
---------- ----------
         1 Closed     
         2 Active     
         3 Testing    
         4 Started    

如果 ID 值在另一个表中用作外键,那么您还需要更新该表中的所有值,并且如果它受参照完整性约束(应该如此)控制,那么您d 需要在更新所有相关表时禁用约束,并在数据再次一致后重新启用约束。除非约束被定义为可延迟的,在这种情况下你可以在同一个事务中更新两个表而不禁用约束。

但是,如果它是一个键,那么它的实际值应该是无关紧要的,并且你不应该真的需要修改合成主键值。

【讨论】:

    【解决方案2】:
    update PROJECT_INFO_STATUS 
    set ID = ID +1
    

    如果不是PKFK,可以直接添加列值

    【讨论】:

      【解决方案3】:

      你应该使用更新命令

      UPDATE mytable SET new_column = <expr containing old_column>

      那么就可以在表查询中求和

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-04-23
        • 1970-01-01
        • 2018-04-09
        • 2021-07-23
        • 1970-01-01
        相关资源
        最近更新 更多