如何为所有行更新 table 的特定字段的值?
How can I update the value of a specific field of my table for all rows?
我是 SQL 的新手,尤其是 Oracle DB,我对如何更新 table.
的所有记录的特定单个字段值有一些疑问
因此,在一个 Oracle 数据库中,我有一个非常简单的 table 名为 PROJECT_INFO_STATUS,具有以下形式:
ID STATUS
-------------
0 Closed
1 Active
2 Testing
3 Starting
正如您在前面的代码片段中看到的那样,这个 table 只有 2 个字段:ID(NUMBER)和 STATUS(VARCHAR)。
我该怎么做才能更新所有行,使 ID 值为 旧 ID 值 + 1。
例如,第一行的 ID 值 (STATUS=Closed) 必须为 1(而不是 0)。第二行的 ID 值 (**STATUS=Active) 必须为 2(而不是 1)。等等。
我怎样才能获得这种行为?
你应该使用更新命令
UPDATE mytable SET new_column = <expr containing old_column>
然后您可以在 table 查询中执行求和
只需将列值设置为自身加一即可:
update project_info_status set id = id + 1;
select * from project_info_status;
ID STATUS
---------- ----------
1 Closed
2 Active
3 Testing
4 Started
如果 ID 值在另一个 table 中用作外键,那么您还需要更新该 table 中的所有值,并且如果它由参照完整性控制约束(因为它应该是)那么你需要在更新所有相关的 table 时禁用约束,并在数据再次一致后重新启用约束。除非约束被定义为可延迟的,在这种情况下,您可以在同一事务中更新两个 table,而无需禁用约束。
但如果它是一个键,那么它的实际值应该是无关紧要的,你不应该真的需要修改一个合成主键值。
update PROJECT_INFO_STATUS
set ID = ID +1
如果不是PK
或FK
可以直接添加列值
我是 SQL 的新手,尤其是 Oracle DB,我对如何更新 table.
的所有记录的特定单个字段值有一些疑问因此,在一个 Oracle 数据库中,我有一个非常简单的 table 名为 PROJECT_INFO_STATUS,具有以下形式:
ID STATUS
-------------
0 Closed
1 Active
2 Testing
3 Starting
正如您在前面的代码片段中看到的那样,这个 table 只有 2 个字段:ID(NUMBER)和 STATUS(VARCHAR)。
我该怎么做才能更新所有行,使 ID 值为 旧 ID 值 + 1。
例如,第一行的 ID 值 (STATUS=Closed) 必须为 1(而不是 0)。第二行的 ID 值 (**STATUS=Active) 必须为 2(而不是 1)。等等。
我怎样才能获得这种行为?
你应该使用更新命令
UPDATE mytable SET new_column = <expr containing old_column>
然后您可以在 table 查询中执行求和
只需将列值设置为自身加一即可:
update project_info_status set id = id + 1;
select * from project_info_status;
ID STATUS
---------- ----------
1 Closed
2 Active
3 Testing
4 Started
如果 ID 值在另一个 table 中用作外键,那么您还需要更新该 table 中的所有值,并且如果它由参照完整性控制约束(因为它应该是)那么你需要在更新所有相关的 table 时禁用约束,并在数据再次一致后重新启用约束。除非约束被定义为可延迟的,在这种情况下,您可以在同一事务中更新两个 table,而无需禁用约束。
但如果它是一个键,那么它的实际值应该是无关紧要的,你不应该真的需要修改一个合成主键值。
update PROJECT_INFO_STATUS
set ID = ID +1
如果不是PK
或FK