急!如何使用SQL语句在复制多行数据时实现主键递增?

来源:百度知道 编辑:UC知道 时间:2024/06/24 10:51:03
我使用的是Oracle数据库,举个例子:
table1:
列名:ID,name,age 其中ID为主键,5位,char型
数据:
0001 张三 20
0002 李四 21
……
0012 王五 19
想要复制一遍,数据不动,主键递增,变成:
0001 张三 20
0002 李四 21
……
0012 王五 19
0013 张三 20
0014 李四 21
……
0024 王五 19
我查了下一般这样写:
insert into table1(ID,name,age)
select 递增,name,age from table1
问题是这个“递增”怎么写啊?
解决加分!
麻烦写一下具体语句,我不懂。。。-_-b平时不是我搞数据库,这是赶鸭子上架没办法
---------------
c5net你的写法有点问题吧~比如第一组数据“0001 张三 20”的ID经过to_char(id+1,'0000')一变就成了0002,冲突了,应该是取最大的ID开始递增吧

你没说清楚是从最大值递增,改一下:
insert into table1(ID,name,age)
select to_char(id+(select max(id from table1)),'0000'),name,age from table1
这样就可以了

order by ID

oracle里面一般呢习惯用序列来让主键自增。
create sequence s_id
start with 1 increment 1 nocycle;

这样一个序列建立好以后再插入主键的时候这样:
insert into table_name(id) values(s_id.nextval)
--仅仅是哪id一个字段作为例子,可以多个字段同时插入

insert into table1 (id,name,age)
select trim(to_char(table1.id + t.num,'0000')),table1.name,table1.age from (select to_number(max(id)) num from table1) t,table1 ;
commit ;
你可以连续执行几次,发现那张表爆了。o(∩_∩)o...

这也是一种解决办法。
把你的数据导出到Excel中,
然后复制多次,知到你觉得够为止,
再把第一列值从第一行点右键向下拉,
这一列的值会自动+1,然后再把这些数据导入到那个表中。