首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > oracle >

如何在已有数据的表中添加id字段并且自增

2012-12-22 
怎么在已有数据的表中添加id字段并且自增,在线等各位大牛,小弟在开发过程中,遇到了这样一个问题,由于新功

怎么在已有数据的表中添加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),


    COLUMN02 varchar2(20),
    COLUMN03 number(9,3),
    ...
)


这里字段不能设定序列为默认值。官网解释:
Restriction on Default Column Values , A DEFAULT expression cannot contain references to PL/SQL functions or to other columns, the pseudocolumns CURRVAL, NEXTVAL, LEVEL, PRIOR, and ROWNUM, or date constants that are not fully specified.
创建完之后,可以通过触发器在字段上使用序列。
2.

5楼的方法有个缺陷: 如果再往里插入数据的话,id还是没有值的,还要update一下。直接使用触发器,一次搞定。

引用:
直接添加一个就好咯

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

希望对楼主有帮助。

热点排行