请问oracle的自增字段是怎么实现的?尤其是我会删除其中的一些记录的时候,我用select max(id) from tablename; 是否可以获得。我担心的是如果我删除一些字段,比如删除的一条现在值是最大的,插入一条新的记录后,新的记录的自增字段是值与刚删除的值相同。另外其它的数据库oracle是否有差别,目前要实现对多数据库的支持,起码要考虑oracle,sqlserver,mysql和db2.
解决方案 »
- oracle行级锁问题
- 关于Select和Insert into的组合
- 请教oracle中使用merge into的问题
- orale里如何把select查出的一行记录拼成一个字符串
- 如何获取给定sql的字段信息
- oracle数据库数据为什么导入不成功
- 请教:如何将某个表中的数据导入到一个文本文件中??
- oracle9i中要将table建在哪个空间?才能让一般的用户(user1)以normal的身份查询到?
- 请教一个棘手的问题,撤消回滚功能怎么来实现?我先是做了一个操作,同时修改插入了N个表,并且提交了,现在我发现我操作错误了
- 简单Select 语句
- pl/sql登陆提示用户锁定
- 问一个触发器问题
----------
1
2
3OPER@jf> delete from test where aaa=3;1 row deleted.OPER@jf> commit;Commit complete.OPER@jf> insert into test values(seq_1.nextval);1 row created.OPER@jf> commit;Commit complete.OPER@jf> select * from test; AAA
----------
1
2
4OPER@jf>
插入前将nextval记下来,然后该怎么做就怎么做了
sqlserver,mysql都是自增字段,需要在操作之后取 SELECT LAST_INSERT_ID()
db2没用过,不清楚
两个人同时操作,你不是要犯傻了
例如oracle使用sequence, sqlserver则是在create table时指定字段属性identity
当然你一定要这样做也可以,就只能用select max(id) ... from tb ,获取最ID的办法oracle里面有创建系列
-- 序列号的产生
create sequence auto_id
minvalue 1
maxvalue 999999999999
start with 1
increment by 1 由这个系列何以获得最新的ID
auto.nextval 下一个ID
auto.currentval 当前ID
既然要考虑到多数据库平台, 那就建一个序列表吧, 然后再SELECT...FOR UPDATE.
这种做法在Tom的那本Ora编程艺术中有介绍, 建议LZ参考一下
begin
For i in int1..int2
Loop
insert into tabid values(i);
End loop;
commit;
end;--插入记录时:
insert into tableA(id) as select min(id0) from tabid;
--其它的字段可以以update tableA的方式来做。这样的话可以用于oracle,sqlserver,mysql和db2。
create sequence seq; ----序列
create or replace trigger tr
before insert on a
for each row
begin
select seq.nextval into :new.a from dual;
end; ----触发器
SQL> insert into a (b) values ('zhangs');1 row insertedSQL> insert into a (b) values ('lisi');1 row insertedSQL> insert into a (b) values ('fgggs');1 row insertedSQL> insert into a (b) values ('wangwun');1 row insertedSQL> select * from a; A B
--------------------------------------- ----------
1 zhangs
2 lisi
3 fgggs
4 wangwunSQL> delete from a where a=(select max(a) from a);1 row deletedSQL> insert into a(b) values('nhhh');1 row insertedSQL> select * from a; A B
--------------------------------------- ----------
1 zhangs
2 lisi
3 fgggs
5 nhhh