【发布时间】:2013-11-17 09:48:29
【问题描述】:
我有一些没有主键的列,想添加一个主键列。
NAME Age
-------------
Peter 45
Bob 25
John 56
Peter 45
有些同事建议添加一个带有序列和触发器的PK: Add a auto increment primary key to existing table in oracle
这很好,但是我的客户使用的数据库用户没有添加序列或触发器的权限。 我想防止联系数十名 DBA 管理员来更改用户权限或运行我的脚本。
这是我的建议,即添加仅包含更新语句的 PK:(我在第 2 步中需要帮助)
第 1 步: 创建 ID 列(我对此拥有数据库权限)
ALTER TABLE PERSON ADD ID NUMBER(10,0);
第 2 步: 问题:我可以根据行的顺序或其他什么来使用唯一值初始化 ID 列吗?怎么样?
UPDATE PERSON SET ID = something-unique
第 3 步: 添加主键约束后缀:(I DB 对此有权限)
ALTER TABLE PERSON ADD CONSTRAINT PK_ID PRIMARY KEY(ID);
第 4 步: 后记:主键由我的应用程序管理和添加。
这将是结果:
ID(PK) NAME Age
---------------------
1 Peter 45
2 Bob 25
3 John 56
4 Peter 45
谢谢各位!
【问题讨论】:
-
WW 给出了基于序列号填充 PK 的方法,但在您的问题中,您说“...基于行的顺序”。您是否为行定义了顺序,例如“created_at”时间戳?
-
我已经用更明确的问题更新了我的文本。谢谢WW!