日期:2014-05-17  浏览次数:20924 次

怎么在已有数据的表中添加id字段并且自增,在线等
各位大牛,小弟在开发过程中,遇到了这样一个问题,由于新功能的增加需要使原有的一张表的结构作出调整,需要添加一个id主键字段,但是因为表里有很多数据了,所以,怎样才能添加这个字段,并且使原有的数据也能够获得id呢?表名为:PROJECT_COLUMN ,请各位大牛帮帮忙,在线等!
------最佳解决方案--------------------
直接添加一个就好咯


create sequence seq_a_id
minvalue 1
maxvalue 999999999999999
start with 1
increment by 1
nocache;


update a set id = seq_a_id.nextval

------其他解决方案--------------------
引用:
各位大牛,小弟在开发过程中,遇到了这样一个问题,由于新功能的增加需要使原有的一张表的结构作出调整,需要添加一个id主键字段,但是因为表里有很多数据了,所以,怎样才能添加这个字段,并且使原有的数据也能够获得id呢?表名为:PROJECT_COLUMN ,请各位大牛帮帮忙,在线等!

你这表里原来没有主键吗?太牛了。。。

1楼方法2 +1
--创建序列器
CREATE SEQUENCE ID_seq
 START WITH     1
 INCREMENT BY   1
 MINVALUE   1
 NOMAXVALUE
 ORDER
 NOCACHE
 NOCYCLE;
--创建新表
create table PROJECT_COLUMN_COPY(
    id int primary key default ID_seq.nextval,
    COLUMN01 varchar2(20),
    COLUMN02 varchar2(20),
    COLUMN03 number(9,3),
    ...
)
--转移数据
insert into PROJECT_COLUMN_COPY (COLUMN01 ,COLUMN02 ,COLUMN03 ,... )
select * from PROJECT_COLUMN;
--删除旧表
drop table PROJECT_COLUMN;
--修改表名
alter table PROJECT_COLUMN_COPY rename to PROJECT_COLUMN;

有问题请大家提出来...
------其他解决方案--------------------
两个方法:
1,重新创建一个表,然后创建一个序列,把老数据导入新表,删除老表,修改新表名字为老表
2,直接在原来表上增加一个字段,创建一个序列,通过更新的方式修改老数据的这个字段
------其他解决方案--------------------
能具体说一下两种方法吗,我是数据库菜鸟,最好能写出一个sql语句就更好了,我在网上查资料说用序列和触发器,不知道具体是怎样操作的?
------其他解决方案--------------------
引用:
两个方法:
1,重新创建一个表,然后创建一个序列,把老数据导入新表,删除老表,修改新表名字为老表
2,直接在原来表上增加一个字段,创建一个序列,通过更新的方式修改老数据的这个字段


我使用的是方法2,
原因是 oracle 数据库不存在自增长字段
------其他解决方案--------------------
rowid 不就是自增长的么。。而且唯一。。
------其他解决方案--------------------
引用:
直接添加一个就好咯

SQL code?123456789create sequence seq_a_idminvalue 1maxvalue 999999999999999start with 1increment by 1nocache;  update a set id = seq_a_id.nextval
ding


------其他解决方案--------------------
感谢这么多人的热心帮忙,问题已成功解决,原本表是用来做参数的,只需要查询一下就可以了,所以就没有弄id主键了,但是后来客户的需求变更添加了一个比较变态的功能,然后发现数据需要操作了,新建一张表的话那么多数据不好弄,时间又比较紧,所以就……我使用的方法就是5楼所讲的sql,在此谢谢HJ_daxian大牛的帮忙!
------其他解决方案--------------------
结贴给分 要生双胞胎了 
------其他解决方案--------------------
虽然结贴了,我也补充一下:
1.
引用:
--创建新表
create table PROJECT_COLUMN_COPY(
    id int primary key default ID_seq.nextval,
    COLUMN01 varchar2(20),