sql - 如何为所有行更新表中特定字段的值?

标签 sql database oracle oracle10g oracle-sqldeveloper

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

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

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

正如您在前面的代码片段中所见,该表只有 2 个字段:ID(NUMBER)和STATUS(a VARCHAR)。

我该怎么做才能更新所有行,使 ID 值为旧 ID 值 + 1

例如,第一行的 ID 值 (STATUS=Closed) 必须为 1(而不是 0)。第二行的 ID 值 (**STATUS=Active) 必须为 2(而不是 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 需要在更新所有相关表时禁用约束,并在数据再次一致后重新启用约束。除非约束被定义为可延迟的,在这种情况下,您可以在同一事务中更新两个表而无需禁用约束。

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

关于sql - 如何为所有行更新表中特定字段的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27920215/

相关文章:

php - 在 LIKE 查询中查找 % 字符

sql - 三表连接与 INNER JOIN 以外的连接

oracle - Oracle 即时客户端和 Oracle 客户端的区别

sql-server - 那里有什么好的空间数据库教程吗?

database - 事务管理器和数据库管理器有什么区别?

sql - oracle plsql中包的备份

sql - 如何使用 Diesel 计算数组列中不同元素的数量?

mysql - 使用相同的表和属性返回不同类型的人

sql - 如何通过 id 以外的任何其他方式获取记录 - SugarCRM

php - 向哈希添加盐后无法使登录脚本工作;之前工作得很好