2

MySql类似,我想用增量值更新(填充)一个空列——使用Oracle。即之后

ALTER TABLE data ADD
(
  id  number
);

我希望该ID列的所有记录都接收唯一值。之后,我将启用Not Null唯一约束以使其成为主键

我很快想出了

UPDATE TABLE data SET id = rownum;

但我对此有不好的预感。它在我的测试中按预期工作,但一个例子不能证明:-)

rownum在 - 语句中以这种方式使用是否安全update

4

3 回答 3

4

是的,我从来没有遇到过这种方法的问题,但是启用非空和唯一约束不会使其成为主键——添加主键约束使其成为主键;)

于 2013-03-12T11:38:11.343 回答
0

可能,您的方法是安全的。如果没有,如果唯一约束失败,您会收到通知:-)。

防弹方法如下:

lock table data in exclusive mode;

merge into data t
using (select t.rowid rid, t.rownum id from data t) s
on (t.rowid = s.rid)
when matched then update set
  t.id = s.id;

commit;
于 2013-03-12T11:26:49.267 回答
-3

不,这不安全,因为 ROWNUM 是伪列。意味着它不保证顺序,尤其是与 ORDER BY 一起使用时。如果必须,请使用 ROW_NUMBER() OVER (ORDER BY your_field) 而不是 ROWNUM。您还可以使用 PL/SQL 在循环中更新您的表一次。

于 2013-03-12T12:58:13.450 回答